我在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表达式指定重复间隔。但我没有发现是否有办法做到这一点。
感谢您的帮助
答案 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”命名计划分配给作业而不是计划字符串。