Oracle阻塞(鎖等待)查詢

it_newbalance發表於2013-01-15
Oracle阻塞(鎖等待)查詢
   主要查詢v$lock、v$session檢視。
v$lock中的id1,id2為鎖定的物件標識,block為阻塞數目。指令碼show_blocker.sql相關程式碼如下:

col block_msg for a80
select c.terminal||' ('''||a.sid||','||c.serial#||''') is blocking '||b.sid block_msg
from v$lock a,v$lock b,v$session c
where a.id1=b.id1
  and a.id2=b.id2
  and a.block>0
  and a.sid<>b.sid
  and a.sid=c.sid
;
 

模擬場景:開3個session,
session1做更新,不提交。
session2做相同行的更新,將會被阻塞。
session3執行指令碼觀察結果。
session1:

cwgl94>select * from t where a=1;
         A NAME       ADDRESS
---------- ---------- --------------------
         1 chennan
已選擇 1 行。
cwgl94>update t set address='my address' where a=1;
已更新 1 行。
cwgl94>select * from t where a=1;
         A NAME       ADDRESS
---------- ---------- --------------------
         1 chennan    my address
已選擇 1 行。
 

session2:

cwgl94>select * from t where a=1;
         A NAME       ADDRESS
---------- ---------- --------------------
         1 chennan
已選擇 1 行。
cwgl94>update t set address='test' where a=1;
[  一直阻塞 ...]
 
 
session3:

cwgl94>select sid,serial#,terminal from v$session;
       SID    SERIAL# TERMINAL
---------- ---------- ----------------
         1          1 CHENNAN
         2          1 CHENNAN
         3          1 CHENNAN
         4          1 CHENNAN
         5          1 CHENNAN
         6          1 CHENNAN
         7          1 CHENNAN
         8          1 CHENNAN
         9        204 CHENNAN
        10       2590 CHENNAN
        11       1480 CHENNAN
已選擇11行。
BLOCK_MSG
-----------------------------------------------------------
CHENNAN ('11,1480') is blocking 10
已選擇 1 行。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24558279/viewspace-752691/,如需轉載,請註明出處,否則將追究法律責任。

相關文章