오라클 lock에는 여러 종류가 있습니다.
Media Recovery(MR),
Redo Thread(RT), User Name(UN), Transaction(TX), DML(TM), P/L SQL User Block(UL), Distrbuted Xaction(DX), Control File(CF), Instance State(IS), File Set(FS), Instance Recovery(IR), Disk Space Transaction(ST), Temp Segment(TS), Library Cache Invalidation(IV), Log State or Switch(LS), Row Wait(RW), Extend Table(TE), Temp Table'(Tt)
Row Share Table Locks(RS) Row share table lock(내부적으로 sub-share table lock,
SS라고 불리기도 함)은 table에 lock을 걸려는 transaction이 table안에 lock된 row가 있고 그 row를 변경시키고자 하는 것을 가리킨다. Row share table lock은 다음 문장에 의해 table에 대해 자동으로 lock을 건다: SELECT . . . FROM table . . . FOR UPDATE OF . . . ; LOCK TABLE table IN ROW SHARE MODE; Row share table lock은 하나의 table에 대해서 높은 concurrency의 degree를 제공하기 위한 table lock의 가장 낮은 수준의 restrictive mode이다. Permitted Operations : Transaction에 의해서 걸리는 row share table lock은 동시에 동일한 table에 대한 query, insert, delete, update, lock row를 허용한다. 그러므로, 다른 transaction은 동일한 table에 대해 동시에 row share, row exclusive, share, 그리고 share row exclusive table lock을 걸 수가 있다. Prohibited Operations : Transaction에 의해서 걸리는 row share table lock은 다른 transaction이 다음의 문장을 이용하여 동일한 table에 대해 exclusive write access를 수행하는 것을 방지한다: LOCK TABLE table IN EXCLUSIVE MODE Row Exclusive Table Locks(RX) Row exclusive table lock(내부적으로 sub-exclusive table lock, SX라 불리기도 함)은 그 lock이 걸린transaction이 그 table에 있는 row들에 대해 하나 이상의 update를 수행하고자 하는 것을 가리킨다. 다음 문장에 의해서 row exclusive table lock이 수정된 table에 대해서 자동으로 걸린다: INSERT INTO table . . . ; UPDATE table . . . ; DELETE FROM table . . . ; LOCK TABLE table IN ROW EXCLUSIVE MODE; Row exclusive table lock은 row share table lock보다 약간 더 제한적이다. Permitted Operations : Transaction에 의해서 거리는 row exclusive table lock은 동시에 동일한 table에 대해서 다른 transaction들이 row들을 query, insert, delete, update, lock 하는 것을 허용한다. 그러므로, row exclusive table lock들은 여러 transaction이 동일한 table에 대해 동시에 row exclusive, row share table lock을 거는 것을 허용한다. Prohibited Operations : Transaction에 의해서 걸리는 row exclusive table lock은 다른 transaction들이 exclusive하게 읽고 쓰기 위해서 수동으로 table을 lock하는 것을 방지한다. 그러므로, 다음 문장을 사용하여 다른 transaction들은 동시에 그 table을 lock할 수 없다: LOCK TABLE table IN SHARE MODE; LOCK TABLE table IN SHARE EXCLUSIVE MODE; LOCK TABLE table IN EXCLUSIVE MODE; Share Table Locks(S) Share table lock은 다음 문장에서 지정된 table에 대해서 자동으로 lock을 건다. LOCK TABLE table IN SHARE MODE; Permitted Operations : Transaction에 의해서 걸리는 share table lock은 다른 transaction들이 단지, table에 대한 query, SELECT ... FOR UPDATE를 이용한 특정 row에 대한 lock, LOCK TABLE ... IN SHARE MODE문들을 성공적으로 수행하기 위해서 허용한다; 다른 transaction에 의한 갱신은 허용하지 않는다. 여러 transaction이 동일한 table에 대해 동시에 share table lock을 수행할 수 있다. 이 경우에 어떠한 transaction도 table을 update할 수 없다 (Transaction이 SELECT ... FOR UPDATE문장의 결과로써 row lock들을 유지할 지라도). 그러므로 만 약 다른 transaction이 동일한 table에 대해 share table lock을 또한 가지지 않을 때에만 share table lock을 가지는 transaction이 update 할 수 있다. Prohibited Operations : Transaction에 의해서 걸리는 Share table lock은 다른 transaction이 다음 문장으로 동일한 table을 변경하는 것을 방지한다: LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE; LOCK TABLE table IN EXCLUSIVE MODE; LOCK TABLE table IN ROW EXCLUSIVE MODE; Share Row Exclusive Table Locks(SRX) Share row exclusive table lock(내부적으로 share-sub- exclusive table lock, SSX라고 불리기도 함)은 share table lock보다 좀 더 제한적이다. Share row exclusive table lock은 다음처럼 하나의 table에 대해서 걸린다. LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE; Permitted Operations : 한 시점에 주어진 table에 대해 하나의 share row exclusive table lock만이 걸릴 수 있다. transaction에 의해 걸린 share row exclusive table lock은 다른 transaction이 query을 하거나 SELECT ... FOR UPDATE로 특정 row를 lock하는 것을 허용하나 table의 갱신은 허용하지 않는다. Prohibited Operations : Transaction에 의해서 걸리는 share row exclusive table lock은 다른 transaction이 동일한 table에 대해 row exclusive table lock을 걸어 table을 변경하는 것을 허용하지 않는다. Share row exclusive table lock은 다른 transaction이 다음 문장을 이용하여 share, share row exclusive, exclusive table lock 을 수행하는 것을 방지한다. LOCK TABLE table IN SHARE MODE; LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE; LOCK TABLE table IN ROW EXCLUSIVE MODE; LOCK TABLE table IN EXCLUSIVE MODE; Exclusive Table Locks(X) Exclusive table lock은 lock을 건 transaction이 table에 대한 access를 exclusive write로 허용하는table lock의 가장 제한적인 모드이다. Exclusive table lock은 다음 문w장에 의해 걸린다: LOCK TABLE table IN EXCLUSIVE MODE; Permitted Operations : 오직 하나의 transaction이 table에 대해 exclusive table lock을 걸 수 있다. Prohibited Operations : Exclusive table lock은 다른 transaction이 그 table을 query하는 것만 허용한다. Exclusive table lock은 어떤 종류의 DML문이나 어떤 종류의 lock도 금지한다. DEFAULT LOCKING FOR INSERT, UPDATE, DELETE AND SELECT ... FOR UPDATE STATEMENT INSERT, UPDATE, DELETE, 그리고 SELECT ... FOR UPDATE 문장의 특성은 다음과 같다. DML문장을 포함하는 transaction은 문장에 의해서 변경되는 row들에 대해 exclusive row lock을 건다.그러므로 locking transaction이 commit되거나 rollback될 때까지 다른 transaction이 lock된 row를 삭제하거나 변경할 수 없다. DML문장을 포함하는 transaction은 subquery나 WHERE절의 query와 같은 묵시적인 query에 의해서 선택된 어떠한 row에 대하여 row lock을 걸 필요가 없다. Transaction의 query은 동일한 transaction의 DML문장에 의한 변화는 볼 수 있지만, transaction이 시작된 이후의 다른 transaction에 의한 변화는 볼 수 없다. 요구되는 exclusive row lock이외에 추가로, DML문장을 포함하는 transaction은 영향받는 row를 포함하는 table에 대해 최소한 하나의 row exclusive table lock을 건다. |
'ORACLE > OWI' 카테고리의 다른 글
Latch의 발생과 경합의 원인 (0) | 2009.03.09 |
---|---|
Oracle에서 Latch 가 성능 저하의 원인이 아닙니다 (0) | 2009.03.01 |
Enqueue 와 Latch (0) | 2009.03.01 |
Direct path read (0) | 2009.02.08 |
LIBRARY CACHE LOCK WAIT EVENT가 나타날 때의 해결방법 (0) | 2008.12.22 |