오라클에서 테이블을 잠그는 이유는 프로그램이 테이블에 삽입을 수행하고 아직 커밋되지 않은 경우 다른 프로그램도 동일한 테이블에 삽입을 수행하면 리소스 사용 예외가 발생하기 때문입니다. , 테이블 잠금.
이 튜토리얼의 운영 환경: Windows 10 시스템, Oracle 11g 버전, Dell G3 컴퓨터.
테이블을 잠그는 주요 이유는 다음과 같습니다.
(1) 프로그램 A는 tableA의 삽입을 실행하고, 프로그램 B도 커밋 전에 tableA를 삽입합니다. 이번에 리소스가 바쁠 때 예외는 Lock 테이블입니다
(2) Lock 테이블은 병렬성보다는 동시성으로 자주 발생합니다. (병렬에서는 한 스레드가 데이터베이스를 운영하면 다른 스레드는 데이터베이스, CPU 및 I/O 할당을 운영할 수 없습니다.) 원칙)
테이블 잠금 확률을 줄이는 방법:
(1) insert, update, delete 문 실행과 커밋 사이의 시간을 줄입니다. 구체적으로 일괄 실행을 단일 실행으로 변경하여 SQL 자체의 비실행 속도를 최적화합니다
(2) 트랜잭션이 비정상적으로 롤백되는 경우
테이블을 잠그는 이유는 행 데이터가 수정되어 행 데이터를 제출하는 것을 잊었으며 이로 인해 테이블도 잠기게 됩니다.
1. 결정하기 전에 시계를 잠그는 이유를 확인하는 것이 좋습니다.
1 테이블 잠금 쿼리의 코드 형식은 다음과 같습니다.
select count(*) from v$locked_object; select * from v$locked_object;
2. 어떤 테이블이 잠겼는지 확인하세요
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
3 어떤 세션이 잠겼는지 확인하세요
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
4 어떤 SQL이 잠겼는지 확인하세요
select b.username,b.sid,b.serial#,c.* from v$locked_object a,v$session b,v$sql c where a.session_id = b.sid and b.SQL_ID = c.sql_id and c.sql_id = '' order by b.logon_time;
5. Kill Drop 해당 프로세스
명령 실행: alter system kill session'1025,41';
여기서 1025는 sid이고 41은 serial#입니다.
2 Oracle 사용자가 로그인할 때 자주 잠기는 이유
. , 메시지가 표시됩니다. Lock
1. 잠금을 해제하려면 dba 역할을 가진 사용자로 로그인하세요. 먼저 특정 시간 형식을 설정하여 변경된 특정 시간
SQL> alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss’;
Session을 확인하세요.
2. time
SQL> select username,lock_date from dba_users where username='TEST'; USERNAME LOCK_DATE ------------------------------ ------------------- TEST 2021-03-10 08:51:03
3. Unlock
SQL> alter user test account unlock;
사용자가 변경되었습니다.
추천 튜토리얼: "Oracle Video Tutorial"
위 내용은 Oracle이 테이블을 잠그는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!