SELECT sid,
DECODE(block, 0, 'NO', 'YES') blocker,
DECODE(request, 0, 'NO', 'YES') waiter
FROM v$lock
WHERE request > 0 OR block > 0
ORDER BY block DESC;
輸出解讀:BLOCKER=YES 持有鎖阻塞他人;WAITER=YES 正在等待鎖。
SELECT bs.username "Blocking User",
ws.username "Waiting User",
bs.sid "Blocking SID", ws.sid "Waiting SID",
bs.serial# "Blocking Serial#", ws.serial# "Waiting Serial#",
bs.sql_address "Blocking SQL Addr", bs.sql_hash_value "Blocking SQL Hash",
bs.program "Blocking Program", ws.program "Waiting Program",
bs.machine "Blocking Machine", ws.machine "Waiting Machine",
bs.osuser "Blocking OS User", ws.osuser "Waiting OS User",
DECODE(wk.type,
'MR', 'Media Recovery', 'RT', 'Redo Thread',
'UN', 'User Name', 'TX', 'Transaction',
'TM', 'DML', 'UL', 'PL/SQL User Lock',
'DX', 'Distributed Xaction', 'CF', 'Control File',
'IS', 'Instance State', 'FS', 'File Set',
'IR', 'Instance Recovery', 'ST', 'Disk Space Tx',
'TS', 'Temp Segment', 'IV', 'Lib Cache Invalidation',
'LS', 'Log Start/Switch', 'RW', 'Row Wait',
'SQ', 'Sequence Number', 'TE', 'Extend Table',
'TT', 'Temp Table', wk.type) lock_type,
DECODE(hk.lmode,
0, 'None', 1, 'NULL', 2, 'Row-S (SS)',
3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)',
6, 'Exclusive', TO_CHAR(hk.lmode)) mode_held,
DECODE(wk.request,
0, 'None', 1, 'NULL', 2, 'Row-S (SS)',
3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)',
6, 'Exclusive', TO_CHAR(wk.request)) mode_requested,
TO_CHAR(hk.id1) lock_id1, TO_CHAR(hk.id2) lock_id2,
DECODE(hk.block,
0, 'Not Blocking', 1, 'Blocking', 2, 'Global',
TO_CHAR(hk.block)) blocking_others
FROM v$lock hk, v$session bs, v$lock wk, v$session ws
WHERE hk.block = 1
AND hk.lmode NOT IN (0,1)
AND wk.request != 0
AND wk.type(+) = hk.type
AND wk.id1(+) = hk.id1
AND wk.id2(+) = hk.id2
AND hk.sid = bs.sid(+)
AND wk.sid = ws.sid(+)
AND bs.username IS NOT NULL
AND bs.username NOT IN ('SYS','SYSTEM')
ORDER BY 1;
| 列 | 含義 |
|---|---|
| LOCK_TYPE | TX=事務鎖(行級)、TM=DML鎖(表級)、UL=用戶鎖、DX=分布式事務... |
| MODE_HELD | 持有鎖模式:6=Exclusive (X)、4=Share (S)、3=Row-X (SX/RS) |
| MODE_REQUESTED | 請求鎖模式:同上 |
| BLOCKING_OTHERS | 1=正在阻塞其他會話 |
| SQL_HASH_VALUE | 可關聯 V$SQL 定位具體 SQL 文本 |
Blocking SID。SELECT sql_text FROM v$sql WHERE hash_value = ; ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;setQueryTimeout、OCI OCI_ATTR_NONBLOCKING_MODE)。