我想知道当通过一个作业执行一个过程时会发生什么,并且在它完成之前是该作业调用该过程的下一次执行的时间。下面是我创建的作业:
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;
如您所见,该作业每30秒执行一次。那么,如果我的过程(PRC_DISTRIBUYE_TRANSACCIONES)延迟超过30秒,在这种情况下,作业会做什么呢?
发布于 2019-05-23 04:06:37
如果您使用(旧的已弃用)作业,即DBMS_JOB
当当前作业完成时,确定下一次执行的开始时间。如果您指定一个间隔为SYSDATE+30/86400
,那么它的并不意味着:"The job 30秒“。
它的意思是:“下一个作业在前一个作业完成后30秒开始。”
如果使用排定程序作业,即DBMS_SCHEDULER
作业开始后,立即评估repeat_interval
(例如FREQ=SECONDLY;INTERVAL=30
),以确定作业的下一个计划执行时间。虽然这可能会在作业仍在运行时到达,但在当前作业完成之前,作业的新实例不会启动。请参阅About Setting the Repeat Interval
所以它的意思是:如果一个作业持续超过30秒,那么新的作业将在前一个作业完成后立即开始。
发布于 2019-05-23 04:05:05
什么都没发生!
仅当"what“参数内的匿名PL/SQL块完成时,才是根据interval参数计算的下一个日期
https://stackoverflow.com/questions/56263769
复制相似问题