pl/sql死鎖

死鎖產生原因:

一般情況只發生鎖超時,就是一個進程需要訪問數據庫表或者字段的時候,另外一個程序正在執行帶鎖的訪問(比如修改數據),那麼這個進程就會等待,當等了很久鎖還沒有解除的話就會鎖超時,報告一個系統錯誤,拒絕執行相應的SQL操作。
發生死鎖的情況比較少,比如一個進程需要訪問兩個資源(數據庫表或者字段),當獲取一個資源的時候進程就對它執行鎖定,然後等待下一個資源空閒,這時候如果另外一個進程也需要兩個資源,而已經獲得並鎖定了第二個資源,那麼就會死鎖,因爲當前進程鎖定第一個資源等待第二個資源,而另外一個進程鎖定了第二個資源等待第一個資源,兩個進程都永遠得不到滿足。

出現死鎖的解決方法:

step1.PL/SQL查看鎖:

select t2.username, t2.sid, t2.serial#,t2.logon_time 

from v$locked_object t1,v$session t2

where t1.session_id = t2.sid

[order t2.logon_time];

step2.查看鎖後,找到sid,serial#,將所有的鎖kill掉:

   alter system kill session 'sid, serial#';

建議:找到對應的sid和serial,逐個刪除即可。






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