DATA LOCK
유저가 INSERT, DELETE, UDATE, SELECT .. FROM .. FOR UPDATE OF 문장을 실행하면, 변경되는 ROW에 대한 ROW LOCK 과 TABLE 에 대한 TABLE LOCK 이 생긴다
● LOCK TYPE - 의미
◎ 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을 할때 까지 걸리므로
다른 유저들이 변경할 수 없다.
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 을 사용한다. 또 TM LOCK 에는 RS (ROW SHARE), RX (ROW EXCLUSIVE), S (SHARE), SRX (SHARE ROW EXCLUSIVE) X (EXCLUSIVE) 가 있다. 이런 TABLE LOCK MODE 는 같은 테이블에서 실행할 수 있는 SQL 문장과 실행할 수 없는 SQL 문장을 구분하기 위해서다. 예를 들어서 한 유저가 사원 테이블을 UPDATE 할때, 다른 유저가 사원 테이블을 DROP 하려고 한다고 가정하자.
그렇다면 테이블 락 모드에는 어떤 것이 있는지 보겠습니다.
● TABLE LOCK MODE (TM)
LOCK TYPE - 의 미
◎ RS ( ROW SHARE LOCK )
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 한다.
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 )
UPDATE ..;, INSERT INTO ..;, DELETE FROM ..; 이나 LOCK .. IN ROW EXCLUSIVE MODE ; 명령에 의해 테이블에 걸리는 LOCK 이다. RX LOCK 도 RS LOCK 과 비슷한 내용이고, 단지 S, SRX, X LOCK 을 걸 수 없다.
◎ S (SHARE LOCK )
LOCK .. IN SHARE MODE; 에 의해 테이블에 생긴 LOCK 이다. S LOCK 은 같은 테이블에 대해서 RS, S LOCK 만 가능
하고, RX, SRX, X LOCK 을 걸 수는 없다.
SQL> LOCK TABLE EMP IN SHARE MODE;
<- 사원 테이블에는 INSERT, UPDATE,DELETE 할 수 없다.
하고, RX, SRX, X LOCK 을 걸 수는 없다.
SQL> LOCK TABLE EMP IN SHARE MODE;
<- 사원 테이블에는 INSERT, UPDATE,DELETE 할 수 없다.
◎ SRX ( SHARE ROW EXCLUSIVE )
- 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;
<- 사원 테이블에 SELECT .. FOR UPDATE OF;는 가능하지만 INSERT, DELETE, UPDATE 는 할 수 없다.
SQL> LOCK TABLE 사원 IN SHARE ROW EXCLUSIVE MODE;
<- 사원 테이블에 SELECT .. FOR UPDATE OF;는 가능하지만 INSERT, DELETE, UPDATE 는 할 수 없다.
◎ X ( EXCLUSIVE )
- LOCK TABLE .. IN EXCLUSIVE MODE; 에 의해 테이블에 생긴 LOCK 이다. X LOCK 은 같은 테이블에서는 어떠한 LOCK 도 걸 수 없다. 즉, DROP TABLE ..;, ALTER TABLE ..; 등의 DDL 문장에 의해 테이블에 생기는 LOCK 이다.
출처 : http://kr.forums.oracle.com/forums/thread.jspa?threadID=431404
'Oracle > Admin' 카테고리의 다른 글
Implementing Oracle Database Security (0) | 2009.12.04 |
---|---|
Managing Undo Data (0) | 2009.12.03 |
Managing Schema Objects-2 (0) | 2009.12.02 |
Managing Data and Concurrency (주요내용 : Lock) (0) | 2009.12.01 |
Managing Schema Objects-1 (0) | 2009.11.30 |