User가 INSERT, DELETE, UDATE, SELECT .. FROM .. FOR UPDATE OF 문장을 실행하면,
변경되는 ROW에 대한 ROW LOCK과 TABLE에 대한 TABLE LOCK이 발생.
ROW LOCK (TX)
INSERT INTO … VALUE.. ;,
DELETE FROM …WHERE …;,
UPDATE ..SET ..WHERE ..;,
SELECT .. FROM .. WHERE .. FOR UPDATE OF.. ; 등의 SQL 문장에서,
WHERE 조건에 해당되는 ROW에 대하여 다른 유저들이 변경할 수 없도록 EXCLUSIVE LOCK 이 생긴다.
TX LOCK이 걸린 ROW는 DML 문장을 실행한 유저가 COMMIT이나 ROLLBACK을 할때 까지 걸리므로
다른 유저들이 변경할 수 없다.
TABLE LOCK (TM)
TX LOCK이 걸린 ROW가 저장된 TABLE에 대한 LOCK 이다.
DML SQL 문장을 수행하는 중에,
해당 테이블이 ALTER 나 DROP 되는 것을 방지하기 위해서 TM LOCK을 사용한다.
같은 테이블에서 실행할 수 있는 SQL 문장과 실행할 수 없는 SQL 문장을 구분하기 위해서다.
TM LOCK에는 RS(ROW SHARE), RX(ROW EXCLUSIVE), S(SHARE), SRX(SHARE ROW EXCLUSIVE), X(EXCLUSIVE) 가 있다.
RS : ROW SHARE LOCK
table에 lock을 걸려는 transaction이 table안에 lock된 row가 있고
그 row를 변경시키고자 하는 것을 가리킨다.
SELECT .. FROM .. WHERE .. FOR UPDATE OF .. ; 이나
LOCK TABLE .. IN ROW SHARE MODE; 명령에 의해 해당 테이블에는 RS LOCK 이 생긴다.
RS LOCK 이 걸린 테이블에는 RS, RX, S, SRX LOCK 을 걸 수 있고, X LOCK 은 걸 수 없다.
단, SELECT .. FROM FOR UPDATE OF 명령에 의해 WHERE 조건에 걸린 ROW 에 대해서는
TX LOCK 이 생기므로 이 ROW 에 대해서 UPDATE, DELETE 를 실행할때는 테이블에 대해서는
RX LOCK이 생기므로 에러는 안 나지만, COMMIT 이나 ROLLBACK 할때까지 WAITING 을 한다.
SELECT .. FOR UPDATE OF; 문장은 테이블에는 RS LOCK 이므로 에러는 안나지만,
ROW 에 대해서는 TX LOCK 이 걸리므로 WAITING 한다.
RX : ROW EXCLUSIVE LOCK
lock이 걸린transaction이 그 table에 있는 row들에 대해
하나 이상의 update를 수행하고자 하는 것을 가리킨다.
UPDATE ..;, INSERT INTO ..;, DELETE FROM ..; 이나
LOCK .. IN ROW EXCLUSIVE MODE ; 명령에 의해 테이블에 걸리는 LOCK 이다.
RX LOCK 도 RS LOCK 과 비슷한 내용이고, 단지 S, SRX, X LOCK 을 걸 수 없다.
S : SHARE LOCK
Transaction에 의해서 걸리는 share table lock은 다른 transaction들이
단지, table에 대한 query, SELECT … FOR UPDATE를 이용한 특정 row에 대한
lock, LOCK TABLE … IN SHARE MODE문들을 성공적으로 수행하기 위해서 허용한다.
LOCK .. IN SHARE MODE; 에 의해 테이블에 생긴 LOCK 이다.
S LOCK 은 같은 테이블에 대해서 RS, S LOCK 만 가능하고, RX, SRX, X LOCK 을 걸 수는 없다.
SQL> LOCK TABLE EMP IN SHARE MODE;
SRX : SHARE ROW EXCLUSIVE
한 시점에 주어진 table에 대해 하나의 share row exclusive table lock만이 걸릴 수 있다.
transaction에 의해 걸린 share row exclusive table lock은
다른 transaction이 query을 하거나 SELECT … FOR UPDATE로
특정 row를 lock하는 것을 허용하나 table의 갱신은 허용하지 않는다.
LOCK TABLE .. IN SHARE ROW EXCLUSIVE MODE; 에 의해 테이블에 생긴 LOCK 이다.
SRX LOCK 은 같은 테이블에 대해서 RS LOCK 만 가능하고 RX, SRX, S, X, LOCK 을 걸 수 없다.
SQL> LOCK TABLE 사원 IN SHARE ROW EXCLUSIVE MODE;
X : EXCLUSIVE
lock을 건 transaction이 table에 대한 access를 exclusive write로 허용하는
table lock의 가장 제한적인모드
LOCK TABLE .. IN EXCLUSIVE MODE; 에 의해 테이블에 생긴 LOCK 이다.
X LOCK 은 같은 테이블에서는 어떠한 LOCK 도 걸 수 없다.
즉, DROP TABLE ..;, ALTER TABLE ..; 등의 DDL 문장에 의해 테이블에 생기는 LOCK 이다.
*Recent Comments