死鎖是資料庫經常發生的問題,資料庫一般不會無緣無故產生死鎖,死鎖通常都是由於我們應用程式的設計本身造成的。產生死鎖時,如何解決呢,下面是常規的解決辦法:
1)執行下面sql,先檢視哪些表被鎖住了:
select b.owner,b.object_name,a.session_id,a.locked_mode
from v$locked_object a,dba_objects b
where b.object_id = a.object_id;
2)查處引起死鎖的會話
select b.username,b.sid,b.serial#,logon_time
from v$locked_object a,v$session b
where a.session_id = b.sid order by b.logon_time;
這裡會列出sid
3) 查出sid和serial#:
查v$session檢視:
select sid,serial#,paddr from v$session where sid='剛才查到的sid';
這一步將得到paddr
4)查v$process檢視:
select spid from v$process where addr='剛才查到的paddr';
這一步得到spid
5)殺死程序
(1)在資料庫中,殺掉oracle程序:
alter system kill session '查出的sid,查出的serial#';
(2)如果在oracle中不能殺死程序,我們只能到作業系統中,使用作業系統命令殺死程序
kill -9 「剛才查出的spid」
在windows平台,可以是偶那個orakill。
oracle資料庫死鎖解決方法
在做專案中,在程式完全正確的情況下,出現了當執行sql語句的時候停止工作的現象,開始是懷疑出現了死鎖,當利用sql查詢時發現自己是對的,死鎖通常都是我們應用程式設計不合理造成的,如何處理資料庫中的死鎖呢?1.先看一下資料庫中那些表被鎖住了。select b.owner,b.object name,a...
oracle資料庫死鎖解決
進入oracle使用者 su oracle 進入dba模式 sqlplus as sysdba 1.查詢被鎖的情況 select object name,machine,s.sid,s.serial from v locked object l,dba objects o v session s w...
資料庫 死鎖產生原因及解決方法
資料庫與作業系統一樣,是乙個多使用者使用的共享資源。當多個使用者併發地訪問資料時,就會產生多個事務同時訪問統一資料的情況。如果對併發操作沒有相應的控制就可能會導致讀取和儲存不正確的資料,破壞了資料庫的一致性。加鎖 讀鎖和寫鎖 是一種控制方法,但當兩個事務要一組有衝突的鎖,而不能將事務繼續下去的話,就...