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 으로 문의 주세요.

답글 남기기

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