一、關鍵表
V$LOCKED_OBJECT :記錄鎖資訊的表
v$session :記錄會話資訊的表
v$sql:記錄執行sql的表
dba_objects:用來管理物件(表、庫等等物件)
二、相關查詢
1. 檢視鎖表的SID
SELECT USERNAME,SID, LOCKWAIT, STATUS, MACHINE, PROGRAM FROM v$session WHERE sid IN (SELECT session_id FROM v$locked_object);
2.檢視鎖表的 SID、oracle 使用者、機器等
SELECT sess.SID, sess.SERIAL#, lo.ORACLE_USERNAME, lo.OS_USER_NAME, lo.LOCKED_MODE, ao.OBJECT_NAME FROM V$LOCKED_OBJECT lo, v$session sess, dba_objects ao WHERE lo.SESSION_ID = sess.SID AND ao.OBJECT_ID = lo.OBJECT_ID;
USERNAME:死鎖語句所用的資料庫使用者;
SID: session_id;
LOCKWAIT:死鎖的狀態,如果有內容表示被死鎖;
STATUS:狀態,active表示被死鎖;
MACHINE:死鎖語句所在的機器;
PROGRAM:產生死鎖的語句主要來自哪個應用程式。
級別 | 描述 |
---|---|
0 | none |
1 | null 空 |
2 | Row-S 行共享(RS):共享表鎖 |
3 | Row-X 行專用(RX):用於行的修改 |
4 | Share 共享鎖(S):阻止其他DML操作 |
5 | S/Row-X 共享行專用(SRX):阻止其他事務操作 |
6 | exclusive 專用(X):獨立訪問使用 |
3. 用sid查詢單個鎖表執行語句
SELECT sql_text FROM v$sql WHERE hash_value IN (SELECT sql_hash_value FROM v$session WHERE sid='XXXXXXXX');
4. 查詢所有加鎖的sql
SELECT sql_text FROM v$sql WHERE hash_value IN (SELECT sql_hash_value FROM v$session WHERE sid IN (SELECT session_id FROM v$locked_object));
三、解鎖語句
ALTER SYSTEM KILL SESSION 'sess.sid, sess.serial#';