原创: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;
-
根据上文得出的 job号
到 sql command中执行:
exec dbms_job.broken(Job号, TRUE);
这样的效果是,job的next_time 变成了 4000/1/1
最好记得提交哦,我好像因为忘记提交,总是变不成 4000/1/1 -
根据上文得出的 spid,到 Windows的cmd执行:
c:\Users\Administratror> orakill 数据库实例名 spid -
再次执行代码1,发现,刚才的 dba_running_jobs 已经不存在了
-
回到 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步,直到所有死锁消失~