找出为什么计划的Oracle作业停止运行

时间:2019-07-18 13:25:51

标签: oracle scheduler jobs

我有一个由调度程序启动的作业,该调度程序在JOB_LOG表中跟踪其子步骤。从昨天(17点)开始,它停止记录其活动。这可能意味着该作业遇到错误,或者确实花费了很长时间,但这不太可能,因为包含所有子步骤的整个作业通常不会超过4个小时。

如果我运行exec DBMS_SCHEDULER.STOP_JOB ( job_name => 'RUN_JOB', force => true);,则表明没有任何作业正在运行。可以肯定的是,我做了一个exec dbms_scheduler.enable('RUN_JOB');,没有出现错误。

在SQL Developer中查看该作业,我看到该作业已启用并且应该每15分钟运行一次,但是在日志记录表中没有看到任何表明新作业已开始的输出。

如何找出停止记录和不运行作业的原因是什么? 我可以尝试通过exec DBMS_SCHEDULER.RUN_JOB('RUN_JOB');运行该作业,但这只会掩盖实际错误(假设它可以正常工作)。

如何查看此作业的作业计划程序的内部状态?我对调度程序如何处理仍在运行的作业特别感兴趣(因此,除非完成,否则它不会每15分钟启动一次)。

SELECT JOB_NAME, STATE FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME like 'RUN_%';的输出为RUN_JOB SCHEDULED;

该作业的RUN_COUNT中有FAILURE_COUNT12

更多信息:如果我运行select JOB_NAME, STATUS, ERROR#, ADDITIONAL_INFO, ACTUAL_START_DATE from ALL_SCHEDULER_JOB_RUN_DETAILS where JOB_NAME like 'RUN_%' order by ACTUAL_START_DATE DESC; ,则会收到有关ORA-00001: unique constraint (RATOR_MONITORING.JOB_LOG_PK) violated的错误消息。这可能意味着生成主键的序列存在问题。

1 个答案:

答案 0 :(得分:1)

我能够通过以下方式找到问题:

select JOB_NAME, STATUS, ERROR#, ADDITIONAL_INFO, ACTUAL_START_DATE from ALL_SCHEDULER_JOB_RUN_DETAILS where JOB_NAME like 'RUN_%' order by ACTUAL_START_DATE DESC;

这对于查看作业是否正在运行但有错误也很有帮助:

SELECT * FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME like 'RUN_%';