收集整理多條實戰常用的動態效能視圖查詢,協助 DBA 快速定位「誰在存取資料庫」、「誰被鎖住」、「誰在鎖表」以及具體爭用資源。
SELECT c.sid, c.serial#, c.username, a.object_id, b.object_name,
c.program, c.status, d.name, c.osuser
FROM v$locked_object a, all_objects b, v$session c, audit_actions d
WHERE a.object_id = b.object_id
AND a.session_id = c.sid(+)
AND c.command = d.action;
可搭配 ALTER SYSTEM KILL SESSION '&1,&2'; 強制中斷異常 Session。
SELECT a.sid, a.serial#, a.username, a.status, a.program, b.name, a.osuser
FROM v$session a, audit_actions b
WHERE a.command = b.action
AND username = '&1';
SELECT a.sid, a.serial#, a.username, a.lockwait, a.status, a.program, b.name
FROM v$session a, audit_actions b
WHERE a.command = b.action
AND lockwait IS NOT NULL;
SELECT a.sid, a.serial#, a.username, a.lockwait, a.status, a.program, b.name
FROM v$session a, audit_actions b
WHERE a.command = b.action
AND status = 'ACTIVE';
SELECT sid, serial#, object_name, row_wait_block#,
row_wait_row#, row_wait_file#
FROM all_objects, v$session
WHERE row_wait_obj# = object_id
AND type = 'USER'
AND lockwait IS NOT NULL;
SELECT sl.username, sl.sid, sl.serial#
FROM v$lock l1, v$session s1
WHERE EXISTS (SELECT *
FROM v$lock l2, v$session s2
WHERE l2.sid = s2.sid
AND l2.id1 = l1.id1
AND l2.id2 = l1.id2
AND l2.request = 0
AND l1.request > 0
AND l1.sid = s1.sid);
此查詢可找出持有鎖定且導致其他 Session 等待的阻塞者。
V$SESSION_WAIT、V$SESSION_EVENT 進一步分析等待事件類型。