Oracle執行定時JOB時,經常會遇到JOB意外死鎖,或者一些JOB執行的程序有對外的接口,當網絡中斷或不穩定時,造成JOB死鎖,佔用資源,以下爲解決方法:
(如果不想JOB釋放後馬上又重新執行,請先將JOB在數據庫中Broken)
1.查看正在執行JOB的Job Id、SID、Serial#、SPID信息:
select c.JOB, b.sid, b.SERIAL#, spid
from v$process a, v$session b, dba_jobs_running c
where a.addr = b.paddr
and b.sid = c.sid
2.嘗試使用以下語句SID、Serial#停止JOB進程:
alter system kill session '646,3312';
(其中'646,3312'分別就是上面查出的SID和Serial#)
3.如通過以上還是無法解決問題,繼續按以下步驟執行:
(1)、首先通過1查詢的JOB ID將死鎖的JOB Broken掉;
(2)、用Root權限進入Linux後臺,用kill -9 29202 終止JOB進程(29202爲1查詢出得SPID);
(3)、在數據庫恢復正常後,在啓用JOB。
以上第1步最好在第2步無效的情況下使用,因直接終止進程可能會造成Oracle或操作系統不穩定或直接崩潰,另外如果還是無法解決以上問題,則只能重啓Oracle數據庫了。