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는 데이타베이스 사용자에
의해 컨트롤 될 수 없다.