我有一个由调度程序启动的作业,该调度程序在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_COUNT
和12
。
更多信息:如果我运行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
的错误消息。这可能意味着生成主键的序列存在问题。
答案 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_%';