有个oracle12c上的job,提交到dbms_job,不知道什么时候开始,停下来了,没有自动运行。
手动关闭这个job,重新打开,不行;删除JOB,重新创建,也不行。
参考拙作:
oracle的JOB
oracle job
手动运行,可以,但提示“任务1%正在运行”。该job运行一个存储过程。手动运行该存储过程,也没有问题。反正就是不会自动执行,也不知道这个1%是什么意思,是怎么来的。
在网上寻寻觅觅,也没有找到这个“任务1%正在运行”问题的解决办法。有的文章说是重启(不知道是重启数据库还是重启服务器,估计是重启服务器,彻底一些);有的说停掉一些会话,语焉不详。最可恶的是,某度给出了一些看似很贴合的搜索结果,是c*dn上的文章,标题明确提到了这个任务1%,但文章要收费才能看下半截;上半截根本没有这个1%的内容,怀疑是个坑。吃相太难看了。谷歌就不会提供这样的结果。
最后参照一篇论述job为何不会自动执行的文章,做了些设置,同时又修改了job的执行频率,结果发现问题解决了。但究竟是因为做了设置,还是修改了执行频率,不得而知。记录如下:
1、先确认Job定时任务运行状态:
SELECT * FROM DBA_JOBS_RUNNING WHERE job = your_job_id;
如果有记录,说明该job正在运行。如果没有,则表明此刻没有运行。
2、查看job属性
可以在pl/sql developer中,右击该job看属性,也可以通过sql来查看:
select job,last_date,last_sec,next_date,next_sec,broken,failures from dba_jobs;
字段含义顾名思义。broken=Y,说明job禁用了,为N则表明job是启用的。
3、尝试重置CJQ0进程
以上都正常的话,尝试重置CJQ0进程。这是个啥进程?不知道。
先执行:
SHOW PARAMETER JOB;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;
这俩语句可以在sql plus命令行里执行,也可以在pl/sql developer中的命令行窗口执行
然后重新设置:
ALTER SYSTEM SET JOB_QUEUE_PROCESSES = [原来的值];
如果发现定时任务的running状态依旧是no,这时候该检查CJQ0进程:
Linux服务器执行命令:ps -ef | grep ora_cjq0
Windows服务器检查服务:OracleJobScheduler[SID]
参考文章:
Oracle定时任务(dbms_job)无法自动运行的解决方法