Oracle Scheduler - 使用单个作业创建复杂的计划

时间:2013-01-19 11:50:47

标签: oracle scheduler jobs dbms-scheduler

我在Oracle 10g数据库上运行了一个具有非常简单的执行计划的作业。

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

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

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

所以问题是:有没有办法告诉调度员在单一工作的时候在TESS-FRI的6,10,14,18点和8,10,14,18上运行?

我读到了使用PL / SQL表达式指定重复间隔。但我没有发现是否有办法做到这一点。

感谢您的帮助

1 个答案:

答案 0 :(得分: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”命名计划分配给作业而不是计划字符串。