有时候安装在windows下的Oracle的JOB定时任务在调用存储过程时会因为ORACLE.EXE (J000)或ORACLE.EXE (J001)进程出现,导致JOB卡死无法执行。
进程代码和相关代码的含义见我的另外一篇博客:
https://blog.csdn.net/dante_feng/article/details/90232763
ORACLE.EXE (J000)
job 具体执行进程,接受 CJQ0 分发的 job 任务,可能存在J00n的情况如J001。
下面说一下JOB因为J000进程导致卡死无法执行的解决方法:
通过sql查询是否存在导致JOB卡死的进程的spid:
select spid from v$session s,v$process p where s.paddr=p.addr and s.PROGRAM like 'ORACLE.EXE%' and s.ACTION = '(JOB名)' and s.BLOCKING_SESSION_STATUS = 'UNKNOWN';
例如查询到的SPID为 1234,我们需要通过这个SPID来杀掉卡死的进程。
一般情况下可能存在使用Oracle层面的kill语句杀不掉进程的情况,我们可以通过查询到的spid使用操作系统命令行来kill掉进程:
我们可以调出windows的cmd命令行,使用如下命令杀掉卡死的进程:
orakill orcl (SPID)
例如:orakill orcl 1234
其中orcl为数据库的实例名,可按需进行修改。
杀掉进程后JOB定时任务即可恢复正常。