1. 程式人生 > >關於oracle資料庫死鎖的解決 以及產生的原因

關於oracle資料庫死鎖的解決 以及產生的原因

前段時間寫sql語句事物造成了資料庫死鎖,導致所有更新操作無法執行

1.查死鎖

檢視關於鎖的會話資訊

select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID

 

 

2.通過查詢到的資訊,殺掉會話

alter system kill session '49,423';  

其中後面的數字分別是  'sid,serial',即上圖紅圈內的欄位內容

殺掉會話後,鎖就會被釋放了,操作就能正常進行了

---------------------------------------------------------------------------------

死鎖的原因

雖然遇到了死鎖,但是對於原因並不知道,現在再次遇到了同樣的問題,而且重現了

下面說下造成死鎖的原因

之所以會造成死鎖,是因為我通過Navicat執行update語句並沒有commit導致的,

通常我們通過專案提交的sql語句都會被自動commit的(模板),但是通過Navicat或plsql

手寫的sql語句,有時候遇到網路不好或者其他問題,會出現沒有commit的情況,語句會導致

資料庫出現死鎖的現象,這時候可以採用上述的方式殺掉死鎖

-------意外情況,沒有許可權使用上述語句怎麼辦

我曾遇到過表被鎖住的情況,但是客戶不會給v$session的許可權,

我使用Navicat的禁用表鎖定,成功的釋放了鎖,不確定是否是普遍適用,

而且這種解鎖方式肯定有很多侷限性,建議大家不要輕易使用這種方式解鎖