ORACLE/OWI2008. 12. 22. 17:01
반응형
오라클 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을 건다.

반응형
Posted by [PineTree]