当 JOB 执行的过程没有完成而 JOB 再次执行它时会发生什么?
What happens when a procedure executed by a JOB is not finished when is time for the JOB to execute it again?
我想知道当一个过程通过一个作业执行时会发生什么,在它完成之前是作业调用下一个过程执行的时间。这是我创建的作业:
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 秒,在这种情况下该作业会做什么?
没有任何反应!
只有当匿名PL/SQL块在“what”参数内完成时,才会根据interval参数
计算下一个日期
如果您使用(旧的已弃用的)工作,即 DBMS_JOB
下一次执行的开始时间以当前作业完成为准。
如果您将间隔指定为 SYSDATE+30/86400
那么它 并不 表示:“作业每 30 秒运行一次。”
这意味着:“下一个作业在上一个作业完成后 30 秒开始。”
如果您使用调度程序作业,即 DBMS_SCHEDULER
作业开始后,立即评估 repeat_interval
(例如 FREQ=SECONDLY;INTERVAL=30
)以确定作业的下一个计划执行时间。虽然这可能会在作业仍在 运行 时到达,但在当前作业完成之前,作业的新实例不会启动。参见 About Setting the Repeat Interval
所以这意味着:如果作业持续时间超过 30 秒,则新作业将在上一个作业完成后立即开始。
我想知道当一个过程通过一个作业执行时会发生什么,在它完成之前是作业调用下一个过程执行的时间。这是我创建的作业:
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 秒,在这种情况下该作业会做什么?
没有任何反应!
只有当匿名PL/SQL块在“what”参数内完成时,才会根据interval参数
如果您使用(旧的已弃用的)工作,即 DBMS_JOB
下一次执行的开始时间以当前作业完成为准。
如果您将间隔指定为 SYSDATE+30/86400
那么它 并不 表示:“作业每 30 秒运行一次。”
这意味着:“下一个作业在上一个作业完成后 30 秒开始。”
如果您使用调度程序作业,即 DBMS_SCHEDULER
作业开始后,立即评估 repeat_interval
(例如 FREQ=SECONDLY;INTERVAL=30
)以确定作业的下一个计划执行时间。虽然这可能会在作业仍在 运行 时到达,但在当前作业完成之前,作业的新实例不会启动。参见 About Setting the Repeat Interval
所以这意味着:如果作业持续时间超过 30 秒,则新作业将在上一个作业完成后立即开始。