201939 oracle 解决死锁,解决JOB死锁

原创:https://blog.csdn.net/hongping626/article/details/8002897

问题来源:
oracle一查,发现好多dba_jobs_running
好多 v$locked_object

约摸着因为job的运行,导致发生了死锁
而且,研究出,dba_jobs_running 与 v$locked_object 中是sid有关联关系

不过,根据上文连接中的指引
我是做的如下操作:

1 执行代码一:

select b.USERNAME,c.JOB,b.sid,b.serial#,spid,d.NEXT_DATE,d.WHAT
from v$process a,v$session b,dba_jobs_running c,dba_jobs d
where a.ADDR= b.paddr
and b.sid= c.SID
and c.JOB =d.JOB
order by next_date;
  1. 根据上文得出的 job号
    到 sql command中执行:
    exec dbms_job.broken(Job号, TRUE);
    这样的效果是,job的next_time 变成了 4000/1/1
    最好记得提交哦,我好像因为忘记提交,总是变不成 4000/1/1

  2. 根据上文得出的 spid,到 Windows的cmd执行:
    c:\Users\Administratror> orakill 数据库实例名 spid

  3. 再次执行代码1,发现,刚才的 dba_running_jobs 已经不存在了

  4. 回到 sql中的 sql command中,执行:
    SQL> exec dbms_job.broken(341,false);
    以启用刚被禁用的job
    另外,同样要记得提交哦~

=================== 花絮 ==================
在确认了无running_jobs后
我又check了一下死锁情况
使用代码:
select a.* ,b.*,c.*
from v$process a,v$session b,v$locked_object c
where a.ADDR= b.paddr
and b.sid= c.session_id;
然后拿到spid后,直接执行第3步,直到所有死锁消失~

发布了83 篇原创文章 · 获赞 18 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/Partner2016/article/details/100104894