接同事消息说Oracle定时任务都不能自动运行,但手动通过dbms_job.run(<job>)执行正常,经分析,发现是CJQ0进程的问题,只需执行一条SQL语句便可。
先确认Job定时任务运行状态:
select job,last_date,last_sec,next_date,next_sec,broken,failures from dba_jobs;
然后,尝试重置CJQ0进程,先执行:
SHOW PARAMETER JOB; ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;
视job任务量等约1-5分钟,然后重新设置:
ALTER SYSTEM SET JOB_QUEUE_PROCESSES = [原来的值];
发现定时任务的running状态依旧是no,这时候该检查CJQ0进程:
- Linux服务器执行命令:ps -ef | grep ora_cjq0
- Windows服务器检查服务:OracleJobScheduler[SID]
如果进程或服务存在,则执行如下SQL语句启动定时任务:
exec dbms_ijob.set_enabled(true);
若进程或服务不存在,则需要重启数据库(Linux)或服务(Windows)。
原创文章禁止转载:技术学堂 » Oracle定时任务(dbms_job)无法自动运行的解决方法