-
Lock설정 순서
- TM Lock
- 로우 Lock
-
테이블 Lock이 사용하는 모드
- NULL 모드
- RS모드 (**Read Share=**Row Share = Sub Share)
- 여러 트랜잭션이 동시에 동일한 데이터를 읽을 수 있습니다.
- 동시에 데이터를 수정하는 경우 충돌을 방지하기 위해 X 락 모드와 충돌합니다.
- 쓰기 작업을 수행하는 트랜잭션이 없는 한 데이터를 읽는 데 사용됩니다.
- RX모드 (Read Exclusive=Row eXclusive = Sub eXclusive)
- 읽기전용모드 : 읽기 작업은 허용되지만 쓰기 작업은 허용되지 않습니다.
- 여러 트랜잭션이 동시에 동일한 데이터를 읽을 수 있지만, 쓰기 작업을 수행하는 트랜잭션이 있으면 충돌합니다.
- S모드 (=Share)
- 여러 트랜잭션이 동시에 동일한 데이터를 읽을 수 있습니다.
- 쓰기 작업은 허용되지 않습니다.
- 일반적으로 트랜잭션이 데이터를 읽을 때 사용됩니다.
- SRX모드 (=Share Row eXclusive) 또는 SSX모드 (=Share/sub eXclusive)
- 여러 트랜잭션이 데이터를 동시에 읽을 수 있지만, 쓰기 작업을 수행하는 트랜잭션이 있으면 충돌합니다.
- 쓰기 작업을 허용하지 않지만 읽기 작업은 허용됩니다.
- X모드 (=eXclusive)
- 트랜잭션이 데이터를 읽거나 수정할 수 있습니다.
- 다른 트랜잭션에서 동일한 데이터를 읽거나 수정하는 것을 허용하지 않습니다.
| 호환표 | NULL | RS
(SELECT FOR UPDATE -10g이하) | RX
(INSERT, UPDATE, DELETE, MERGE)
(SELECT FOR UPDATE -11g이상) | S | SRX | EX
(=DDL) |
| --- | --- | --- | --- | --- | --- | --- |
| NULL | O | O | O | O | O | O |
| RS
(SELECT FOR UPDATE -10g이하) | O | O | O | O | O | |
| RX
(INSERT, UPDATE, DELETE, MERGE)
(SELECT FOR UPDATE -11g이상) | O | O | O | | | |
| S | O | O | | O | | |
| SRX | O | O | | | | |
| EX (=DDL) | O | X | X | | | |
- 예)
- 선행 트랜잭션이 DML을 위해 로우Lock을 걸기전에 TM Lock을 RX모드로 잠갔다면
- 후행 트랜잭션은 S, SRX, X 모드로만 작업을 할 수 있다
- 후행 트랜잭션은 S, SRX, X 모드 그 외로는 대기를 해야한다.
DML문과 SELECT~FOR UPDATE 간의 경합 발생 가능성
TM Lock경합은 절대 발생하지 않는다(서로 호환가능함)
단, 같은 로우일 때 로우Lock 경합만 있다
- DML문 (INSERT, UPDATE, DELETE, MERGE)를 위해 로우 Lock을 설정하려면?
- RX (=SX) 모드 TM Lock 을 먼저 설정한다
- SELECT ~ FOR UPDATE문을 위해 로우Lock을 설정하려면?
- RS (=SS)모드 TM Lock을 설정한다 (10g 이하)
- RX (=SX)모드 TM Lock을 설정한다 (11g 이상)