library cache lock問題處理

在做imp導入時,遲遲未能結束,查詢imp導入的sid當前操作時,發現已經在做統計分析步驟,等待事件爲library cache lock,通過以下步驟,查到阻塞進程的操作爲analyze table,爲何會造成阻塞,還得繼續研究。解決阻塞的辦法如下:

通過查詢x$kgllk,找阻塞者的saddr信息,進而找到會話信息,然後將相關會話殺掉。
首先查到等待事件爲library cache lock的會話的SID和SADDR:
select sid,saddr from v$session where sid=340;

SID SADDR
———- —————-
340 C00000006B996770
接着根據SADDR的值,查詢:x$kgllk 數據字典,查詢阻塞者的SADDR信息:
select kgllkses saddr, kgllkhdl handle, kgllkmod mod, kglnaobj object
from x$kgllk lock_a
where kgllkmod > 0
and exists (select lock_b.kgllkhdl
from x$kgllk lock_b
where kgllkses = '&SADDR'
and lock_a.kgllkhdl = lock_b.kgllkhdl
and kgllkreq > 0);

SADDR HANDLE MOD OBJECT
—————- —————- ———- ————–
C00000006B991D80 C000000081ED5C58 table_name
阻塞者的會話的SADDR爲:C00000006B991D80,接着根據這個去查v$session,從而可以查到阻塞者的SID
select sid,saddr from v$session where saddr='C00000006B991D80';
根據得到的sid,查詢當前該sid進行的操作
SELECT sql_text,sql_id
FROM v$sqltext a
WHERE a.hash_value = (SELECT sql_hash_value
FROM v$session b
WHERE b.SID = '&sid')
ORDER BY piece ASC
/
判斷阻塞的會話性質,通過kill session解決阻塞

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章