LOCK의
유형

   데이타의 concurrency를 보장하기 위해
오라클은 lock과 transaction을 사용한다.

   Lock은 같은 자원을 access하는 사용자들 사이에 상호간에 해를 끼치는 것을 예방하기 위해서 사용되는 메카니즘이다.

   Lock의 종류

      –
Exclusive : lock
이 걸린
자원의 공유를 허용하지 않는다.

      –
Share :
자원에 대해
수행되는 명령의 유형에 따라
lock
된 자원의
공유되는 것을 허용한다.

 

   오라클에서의 Lock의 일반적인 범주

      –
Data or DML (row locks TX and table locks TM) :
동시에
다중의 사용자에 의해 access되는 테이블 데이타의 보호를 위해 사용된다.

      –
Dictionary or DDL(TD) :
트랜잭션에서 access되는 테이블과 같은
Object
의 정의를 보호하기 위해서 사용한다.

      –
Internal and Latches (RT, MR) : SGA
영역에서의
내부적인 데이타베이스와 메모리 구조를 보호하기 위해 사용한다.

 

   1.
TABLE LOCKS

      테이블의 특정한
row
를 수정하는
문장은 항상 그러한 row에
대해 exclusive row lock을 획득하고 테이블 lock을 전유한다.

      (1)
Row Share Table Locks (RS)

         
– row
를 lock 시키고 lock된
테이블을 UPDATE 할 목적이다.

         
–
모든 row를 SELECT 하려는
다른 트랜잭션을 허용한다.

         
–
동일 테이블에서 lock 되지 않은 row를 INSERT, UPDATE,
DELETE
하는 다른 트랜잭션을 허용한다.

         
–
테이블에 대한 ROW SHARE, ROW EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE lock을 획득하려는 다른 트랜잭션을 허용한다.

         
– EXCLUSIVE
모드에서의 테이블 locking으로부터 다른 트랜잭션을 예방한다.


      (2)
Row Exclusive Table Locks (RX)

         
– row
를 lock 시키고 테이블에서 row를 변화시킨다.

         
–
모든 row를 SELECT 하려는
다른 트랜잭션을 허용한다.

         
–
동일 테이블에서 lock 되지 않은 row를 INSERT, UPDATE,
DELETE
하는 다른 트랜잭션을 허용한다.

         
–
테이블에 대한 ROW SHARE, ROW EXCLUSIVE lock을
획득하려는 다른 트랜잭션을
허용한다.

         
– SHARE, EXCLUSIVE, SHARE ROW EXCLUSIVE
모드에서의
테이블 locking으로부터 다른
트랜잭션을 예방한다.


      (3)
Share Table Locks (S)

         
–
다른 트랜잭션을
제공하지 않는 테이블에서 row를 INSERT, UPDATE, DELETE 하는 것이 SHARE lock을 홀딩한다.

          –
동일 테이블에서
지정된 row를 QUERY 또는
LOCK
하려는 다른
트랜잭션을 허용한다.

         
–
테이블에 대해
더 나아가 SHARE lock을 얻으려는 다른
트랜잭션을 허용한다.

         
– EXCLUSIVE
또는
SHARE ROW EXCLUSIVE
모드로 테이블을 locking 하는 것으로부터 다른
트랜잭션을 보호한다.


      (4)
Share Row Exclusive Table Locks (SRX)

         
–
테이블에 row를 INSERT, UPDATE, DELETE 한다.

         
–
동일 테이블에서
지정된 row를 QUERY 또는
LOCK
하려는 다른
트랜잭션을 허용한다.

         
– SHARE, EXCLUSIVE
또는
SHARE ROW EXCLUSIVE
모드로 테이블을 locking 하는 것으로
부터 다른 트랜잭션을 보호한다.


      (5)
Exclusive Table Locks (S)

         
–
테이블에 row를 INSERT, UPDATE, DELETE 한다.

         
–
동일 테이블에서
지정된 row를 QUERY하는 것에
대해서만 다른 트랜잭션을 허용한다.

         
–
어떠한 lock 문장을 내리는 것으로부터 다른 트랜잭션을 보호한다.

 

   2.
DICTIONARY LOCKS

     
Dictionary lock
은
Object
에 대한 DDL 명령이 수행되는
동안 Object의
정의를 보호한다.

 

   3.
INTERNAL LOCKS
과 LATCHES

     
Latches
와 Internal lock은 메모리 구조를
보호하기 위한 메카니즘이다.

      –
Latches
는 SGA 영역에 있는
shared data structure
를 보호하기 위한 low-level 연속 메카니즘이다.

      –
Internal lock
은 data dictionary
entry
를 보호하고 database file,  tablespace, rollback segment를 lock한다.

     
Latches
와 Internal locks는 데이타베이스 사용자에
의해 컨트롤 될 수 없다.

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다