在DBMS_SCHEDULER作业中计划的异常

时间:2017-01-18 17:10:25

标签: oracle oracle11g dbms-scheduler

我有一个Oracle DBMS_SCHEDULER作业,通常每小时运行一次。没问题。但是,我最近需要对此做一个例外,因此每周六的最后一次运行(即晚上11点的运行)会提前一点。 (理性是一个涉及公司政治的长篇故事。)

我以为我可以使用EXCLUDE子句轻松完成这项工作,但我无法解决这个问题。我得到的错误如下:

ORA-27422: usage of BYHOUR not supported in embedded calendar application...
ORA-06512: at "SYS.DBMS_ISCHED", line 135
ORA-06512: at "SYS.DBMS_SCHEDULER", line 271
ORA-06512: at "XDH.ROBOT", line 680
ORA-06512: at line 1

我发现让它发挥作用的唯一方法是创建三个(!)时间表,如下所示:

dbms_scheduler.create_schedule(
    schedule_name   => 'sunday_to_friday',
    repeat_interval => 'freq = hourly; interval = 1; byday=sun,mon,tue,wed,thu,fri' );

dbms_scheduler.create_schedule( --All but the last run on Saturday.
    schedule_name   => 'saturday_most',
    repeat_interval => 
        'freq = hourly; byday=sat;'||
        ' byhour=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22' );

dbms_scheduler.create_schedule( --Last run on Saturday.
    schedule_name   => 'saturday_last',
    repeat_interval => 
        'freq = weekly; byday=sat; byhour=22; byminute=54 ' );

然后我使用了&sunday_to_friday,saturday_most,saturday_last'作为作业本身的repeat_interval。

这看起来很笨拙。是否有更好/更简单的方法来做这种事情?

我们目前正在使用Oracle 11g版本11.2.0.4.0。

0 个答案:

没有答案