oracle數(shù)據(jù)庫出現(xiàn)死鎖的時候可以按照以下處理步驟加以解決:
第一步:嘗試在sqlplus中通過sql命令進行刪除,如果能夠刪除成功,則萬事大吉!但通常情況下,出現(xiàn)死鎖時,想通過命令行或者通過oracle的管理工具刪除有死鎖的session,oracle只會將該session標記為killed,但無法清除掉,往往需要通過第二步在操作系統(tǒng)層級進行刪除!
connected to oracle9i enterprise edition release 9.2.0.1.0
connected as quik
sql> select xidusn, object_id, session_id, locked_mode from v$locked_object; --查死鎖的對象,獲取其session_id
xidusn object_id session_id locked_mode
---------- ---------- ---------- -----------
10 30724 29 3
10 30649 29 3
sql> select username,sid,serial# from v$session where sid=29; --根據(jù)上步獲取到的sid查看其serial#號
username sid serial#
------------------------------ ---------- ----------
quik 29 57107
sql> alter system kill session '29,57107'; --刪除進程,如已經(jīng)刪除過,則會報ora-00031的錯誤;否則oracle會將該session標記為killed狀態(tài),等待一段時間看能否會自動消失,如長時間消失不掉,則需要做后續(xù)步驟
alter system kill session '29,57107'
ora-00031: session marked for kill
sql> select pro.spid from v$session ses,v$process pro where ses.sid=29 and ses.paddr=pro.addr; --查看spid號,以便在操作系統(tǒng)中根據(jù)該進程號刪除進程
spid
------------
2273286
第二步:進入操作系統(tǒng)進行刪除進程,本示例的操作系統(tǒng)是ibm aix。
microsoft windows xp [版本 5.1.2600]
(c) 版權(quán)所有 1985-2001 microsoft corp.
c:\documents and settings\administrator>telnet 10.73.52.7 --通過telnet遠程登陸到數(shù)據(jù)庫服務器
aix version 5
(c) copyrights by ibm and by others 1982, 2005.