日期:2014-05-16  浏览次数:20441 次

Oracle JOB 的探讨

当你 执行 DMBS_JOB.RUN(:JOB_ID) ;则此条job的记录,将在 user_jobs ?存在一条记录,但是DBA_JOBS_RUNNING 中并没有此条对应的记录。

?

1、Broken()过程更新一个已提交的工作的状态,典型地是用来把一个已破工作标记为未破工作。
   这个过程有三个参数:job 、broken与next_date。?
   PROCEDURE Broken (job    IN binary_integer,?
            Broken  IN boolean,?
            next_date IN date :=SYSDATE)?
   job参数是工作号,它在问题中唯一标识工作。?
   broken参数指示此工作是否将标记为破——TRUE说明此工作将标记为破,而FLASE说明此工作将标记为未破。?
   next_date参数指示在什么时候此工作将再次运行。此参数缺省值为当前日期和时间。?
   job如果由于某种原因未能成功之行,oracle将重试16次后,还未能成功执行,将被标记为broken?

?

当你执行了 DBMS_JOB.BROKEN(:JOB_ID,true) 后,在?DBA_JOBS_RUNNING? 表中即可存在了一条与之对应的记录。网上的文档一般认为?DBA_JOBS_RUNNING?? 表存放的是正在运行的job,但是我觉得这里存放的已破了的job记录。

我有以下几个疑问:

?DBMS_JOB.BROKEN(:JOB_ID,false) 后,job并没有立刻重新执行,我等待了很长的时间后,观察也没有执行,不知道是为什么!后来我有用了 ??DBMS_JOB.RUN(:JOB_ID) 后,发现job也没有立刻的执行,不知道这是为什么!