当JOB再次执行JOB时,JOB执行的过程未完成时会发生什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

我想知道当一个过程通过一个作业执行时,在它完成之前会发生什么,这是作业调用下一个程序执行的时间。这是我创造的工作:

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秒,那么这项工作的作用是什么?

提问于
用户回答回答于

如果你使用(旧的已弃用)工作,即 DBMS_JOB

当前作业完成时确定下一次执行的开始时间。如果您指定间隔,SYSDATE+30/86400那么它并不意味着:“作业每30秒运行一次。”

这意味着:“下一个工作在上一个工作完成后30秒开始。”

如果您使用调度程序作业,即 DBMS_SCHEDULER

在作业开始之后,立即评估repeat_interval(例如FREQ=SECONDLY;INTERVAL=30)以确定作业的下一个预定执行时间。虽然这可能在作业仍在运行时到达,但是在当前作业完成之前,新作业实例才会启动。请参阅关于设置重复间隔

这意味着:如果作业持续时间超过30秒,则新作业将在上一个作业完成后立即开始。

用户回答回答于

什么都没发生! 仅当“ what ”参数内的匿名PL / SQL块完成时,才会根据interval参数计算下一个日期

所属标签

可能回答问题的人

  • HKC

    红客学院 · 创始人 (已认证)

    26 粉丝7 提问5 回答
  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问3 回答
  • 螃蟹居

    1 粉丝0 提问2 回答
  • 富有想象力的人

    2 粉丝0 提问1 回答

扫码关注云+社区

领取腾讯云代金券