Oracle Job 死锁解决方案

    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数据库了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章