3

我有一个在 Oracle 10g DB 上运行的作业,执行计划非常简单。

BYDAY=MON,TUE,WED,THU,FRI;BYHOUR=6,10,14,18

现在的问题是我们必须改变计划——但仅限于周一。所以在星期一,第一份工作应该在 8 点而不是 6 点运行。然后像所有其他工作一样(10、14、18)。而从周二到周五,它应该像上面那样运行。

最简单的方法是为星期一创建第二个工作并将星期一从原始工作中删除。然而,这对我们的应用程序来说是个问题,因为它每次导入只依赖一个作业。

所以问题是:有没有办法告诉调度程序在 TUE-FRI 的 6、10、14、18 点和 MON 的 8、10、14、18 点运行一个作业?

我阅读了有关使用 PL/SQL 表达式指定重复间隔的信息。但我不知道是否有办法做到这一点。

谢谢你的帮助

4

1 回答 1

5

创建一个复合计划,并在创建时将其分配给作业。

例如:

begin
  dbms_scheduler.create_schedule('MY_SCHED1', repeat_interval =>
  'FREQ=DAILY;BYDAY=TUE,WED,THU,FRI;BYHOUR=6,10,14,18');
END;
/
begin
dbms_scheduler.create_schedule('MY_SCHED2', repeat_interval =>
  'FREQ=DAILY;BYDAY=MON;BYHOUR=8,10,14,18');
END;
/
begin
dbms_scheduler.create_schedule('MAIN', repeat_interval =>
  'MY_SCHED1, MY_SCHED2');
END;
/

现在您只需将名为“MAIN”的计划分配给作业,而不是计划字符串。

于 2013-01-19T15:41:07.003 回答