2009년 8월 25일 화요일

ORACLE_007. MONITORING LOCK CONTENTION - Table Lock, DDL Lock

MONITORING LOCK CONTENTION - Table Lock, DDL Lock            

MANUAL TABLE LOCK MODES (SYNTAX)

 SQL> LOCK TABLE table_name IN mode_name MODE;

            *SQL>LOCK TABLE employee IN exculsive MODE;

 

MODE : SHARE (S) LOCK

 이 모드는 다른 TRANSACTION에게 오직 SELECT . . . FOR UPDATE 만 허용합니다. 당연히 테이블을 변환시키는 일련의 어떠한 행동도 막아버립니다.

 

MODE : SHARE ROW EXCLUSIVE (SRX) LOCK

 DML 명령이나 수동으로 SHARE LOCK 을 획득하는 어떠한 행위도 막아버리는 높은 수준의 테이블 락 입니다. 맹목적으로 데이터의 무결성 참조를 위해 사용합니다.

 

MODE : EXCLUSIVE (X) LOCK

 테이블에 대한 쿼리만 허용합니다. 어떠한 타입의 DML이나 수동 LOCK을 제한합니다.

 

 TRANSACTION 1          

TRANSACTION 2           

 LOCK TABLE  department IN                                              

 EXCLUSIVE MODE: 

 Table(s) Locked;

SELECT * FROM department                                  

FOR UPDATE;

Transaction 2 wait.

 

DDL LOCK

 EXCLUSIVE DDL LOCKDROP TABLE, ALTER TABLE 문에 필요합니다.

 CREATE, ALTER, DROP 같은 DDL 문은 적용할 오브젝트에 대해 반드시 EXCLUSIVE LOCK 이 필요합니다. 어떠한 레벨의 락이 걸려있다면 ALTER TABLE 구문은 실행되지 않습니다.

 

 TRANSACTION 1          

TRANSACTION 2           

 UPDATE employee  

 SET salary = salary*1.1                                                            

3120 rows updated.

ALTER TABLE employee

DISABLE PRIMARY KEY;

ORA-00054 : Resource busy and                          

acquire with NOWAIT specified

 

 SHARE DDL LOCKCREATE PROCEDURE, AUDIT 문에 필요합니다.

 GRANT, CREATE PACKAGE는 Shared DDL Lock을 필요로 합니다. 이러한 종류의 락은 비슷한 DDL 구문을 제한하지 않습니다. 허나 참조하고 있는 오브젝트를 Altering 하거나 Dropping 하는 행위는 제한합니다.

 

fin.

REF) Oracle9i Performance Tuning - Volume I

댓글 없음:

댓글 쓰기