檢查行鎖等待問題的指令碼(單機和rac都通用),指令碼rac
來源於:
How to use historic ASH data to identify lock conflicts (文檔 ID 1593227.1)
對於當前正在lock的情況,指令碼為(單機和rac通用):
with lk as (select blocking_instance||'.'||blocking_session blocker, inst_id||'.'||sid waiter from gv$session where blocking_instance is not null and blocking_session is not null)select lpad(' ',2*(level-1))||waiter lock_tree from (select * from lk union all select distinct 'root', blocker from lk where blocker not in (select waiter from lk))connect by prior waiter=blocker start with blocker='root';
注意:以上語句不能在plsql-dev的sql windows視窗中執行,可以在plsql-dev的command windows視窗中執行,可以在sqlplus中執行。查詢結果為:
也就是說:1號執行個體的sid為1094的sssion 阻塞著 1號執行個體的sid為1077的session
這是1個session阻塞1個session的情況,下面再來看1個session阻塞2個session的情況:
也就是說:1號執行個體的sid為1094的sssion 阻塞著2個session: 1號執行個體的sid為1077的session 和1號執行個體的sid為1086的session而用侯聖文(這裡先謝過侯總)的指令碼去查,結果如下: