關於oracle資料庫死鎖的解決 以及產生的原因
阿新 • • 發佈:2018-12-09
前段時間寫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的禁用表鎖定,成功的釋放了鎖,不確定是否是普遍適用,
而且這種解鎖方式肯定有很多侷限性,建議大家不要輕易使用這種方式解鎖