ORACLE進程被KILL之后,狀態被置為quot;KILLEDquot;,但是鎖定的資源長時間不釋放,會出現類似下面這樣的錯誤提示:ORA-00030:
Oracle進程被KILL之后,狀態被置為"KILLED",但是鎖定的資源長時間不釋放,會出現類似下面這樣的錯誤提示:
ORA-00030: User session ID does not exist
或
ORA-00031: session marked for kill
以往大多都是通過重啟數據庫的方式來強行釋放鎖資源。
現提供另一種方式解決該問題,在ORACLE中KILL不掉,在OS系統中再殺,,操作方式如下:
1. 查看哪些對象被鎖
SELECT DISTINCT t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;
2.查看對應執行的是哪一個SQL語句(會提示輸入SID參數,就是上一步查詢出來 的SID)
select sql_text from v$session a,v$sqltext_with_newlines b
where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value
and a.sid=&sid order by piece;
3.殺死對應的進程(上述的sid與serial#參數傳入)
alter system kill session 'sid,serial#';
上述步驟完成之后,若還是無法釋放對應的資源,進行下一步操作:
4. 取得語句的進程號
select spid,oSUSEr,s.program from v$session s,v$process p
where s.paddr=p.addr and s.sid=&sid;
5.在OS級別中殺死該進程
a. unix系統,以root身份執行以下命令
# kill -9 &spid(即第4步查詢出來的進程號spid)
b. windows系統,用orakill命令執行
語法為:orakill sid thread
sid: oracle實例名
thread 線程號,即第4步中的spid
eg: c:> orakill orcl 12345
上述直至第4步,都是在oracle中執行的,第5步是在操作系統(服務端,非客戶端)中執行的
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com