Edg*_*ez 4 sql oracle plsql scheduled-tasks job-scheduling
我想知道在通过作业执行过程时以及完成之前发生的事情是该作业调用该过程的下一次执行的时间。这是我创建的工作:
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
(
job => x
,what => 'BEGIN PKG_DISTRIBUIDOR_SCHEDULER.PRC_DISTRIBUYE_TRANSACCIONES(5000); END;'
,next_date => to_date(sysdate,'dd/mm/yyyy hh24:mi:ss')
,interval => 'SYSDATE+30/86400'
,no_parse => FALSE
);
DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
Run Code Online (Sandbox Code Playgroud)
如您所见,作业每30秒执行一次。因此,如果我的过程(PRC_DISTRIBUYE_TRANSACCIONES)延迟超过30秒,那么在这种情况下该工作做什么?
DBMS_JOB当前作业完成时,确定下一次执行的开始时间。如果您指定一个间隔,SYSDATE+30/86400则它并不表示:“作业每30秒运行一次”。
这意味着:“下一个作业在上一个作业完成后30秒开始。”
DBMS_SCHEDULER作业开始后,立即评估repeat_interval(例如FREQ=SECONDLY;INTERVAL=30)以确定该作业的下一个计划执行时间。尽管这可能在作业仍在运行时到达,但作业的新实例要等到当前实例完成后才能启动。请参阅关于设置重复间隔
因此,这意味着:如果作业持续时间超过30秒,则新作业将在前一个作业完成后立即开始。