提交的一个job 不运行
原文SUBMITTED A JOB IT IS NOT RUNNING (Doc ID 1026586.6)问题描述:
你已经使用dbms_job.submit package 提交了一个job,但是该job没有正常运行。
解决方案描述:
当你遇到该问题时,有多种情况需要检查。下面的诊断将会帮助你定位问题。
诊断列表(diagnostic checklist)
a) 是否有snp进程在运行?
SVRMGR> connect internal
Connected.
SVRMGR> show parameter job
NAME TYPE VALUE
----------------------------------- ------- ------------------------------
job_queue_interval integer 10
job_queue_keep_connections boolean FALSE
job_queue_processes integer 1
job_queue_processes must be >= 1
--->额外注意:此处还有job_queue_interval 这个参数以及svrmgr以及snp进程,估计是8i或者是更早版本。
b) 检查dba_jobs 并确认你的那个job在查询结果中。
SQL> select job, last_date, last_sec, next_date, next_sec, this_date, this_sec,
broken, failures, interval, what from user_jobs;
BROKEN:
如果Y,意味着你的这个job有16次 failure,并且该job不再执行。
并且snp.trc file应在在bdump目录下被建立。该trc文件可以看到job不执行的原因。
一旦你解决了这个问题,unbreak 这个job:
execute dbms_job.broken(16,false);
LAST_DATE&LAST_SEC/NEXT_DATE&NEXT_SEC:
验证the last execution and the next execution
以判断该job是否实际的执行过 和 该job是否被调度以准备下一次的执行。
如果 WHAT 列 没有你调度的那个job,原因要么是该job被remove掉了,要么是没有正确的提交(submit)
c)查询DBA_JOBS_RUNNING 视图,以确认该job是否正在运行并且还没有运行完毕。
d)验证对于 该job的user 下 有a private database link
(LOG_USER: USER logged in when job was submitted)
e)在执行 DBMS_JOB.SUBMIT的存储过程后面,加一个commit
The COMMIT 必须声明以提交该job
f)验证你的job,当存储过程执行后,在exiting之前,会发出一个commit。