2007年10月16日 星期二

[DB] 查詢被LOCK的TABLE資訊 (SQL Script)

當資料被lock時,下面這段SQL可以方便查出是那個Table locklockmode為何,以及附帶一段kill session指令,方便刪除已當掉的session,不過要提醒的是,沒把握或不清楚時不要亂刪除 session

SELECT A.OBJECT_NAME,
A.OBJECT_TYPE,
B.SESSION_ID,
C.SERIAL#,
B.ORACLE_USERNAME,
B.OS_USER_NAME,
C.MACHINE,
DECODE(B.LOCKED_MODE,0, 'None', 1, 'Null (NULL)', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share (S)', 5, 'S/Row-X (SSX)', 6, 'Exclusive (X)' , '') LOCKED_MODE,
'alter system kill session '''to_char(b.session_id)','to_char(c.serial#)''';' script
FROM ALL_OBJECTS A, V$LOCKED_OBJECT B, V$SESSION C
WHERE A.OBJECT_ID = B.OBJECT_ID
AND B.SESSION_ID = C.SID
ORACLE定義lock mode的7個級別
0 - none - 無
1 - null (NULL) - 可能某些情況下,如分佈式數據庫的查詢會產生此鎖。
2 - row-S (SS) - 表結構共享鎖
3 - row-X (SX) - 表結構共享鎖+被操作的記錄的排它鎖(若有DML操作)
4 - share (S) - 表結構共享鎖+所有記錄共享鎖(隱含)
5 - S/Row-X (SSX) - 表結構共享鎖+所有記錄排它鎖(隱含)
6 - exclusive (X) - 表結構排它鎖

[xsb Oracle Blog]有很好的解釋http://xsb.itpub.net/post/419/38475

1 則留言:

垃圾堆裡的仙鶴 提到...

好用的script,
收下了.
感謝.