周末Oracle DBMS Scheduler的频率更改

Vishesh

我创建了一个oracle dbms调度程序,每天在05 AM,10 AM,03 PM和08 PM执行一个过程。下面是调度程序代码

DBMS_SCHEDULER.CREATE_JOB
(
   job_name        => 'TEST_JOB'
  ,start_date      => SYSDATE
  ,repeat_interval => 'FREQ=DAILY; BYHOUR=05,10,15,20; BYMINUTE=00 ;BYSECOND=0;'
  ,end_date        => NULL
  ,job_class       => 'DEFAULT_JOB_CLASS'
  ,job_type        => 'PLSQL_BLOCK'
  ,enabled         => TRUE
  ,job_action      => 'BEGIN INSERT_IN_TABLE; END;'
  ,comments        => 'TEST JOB'
);

现在,我必须修改同一调度程序,以在周末仅执行两次相同的过程,并在工作日以相同的频率运行。

我不想为周末执行创建其他调度程序,因为有时该过程需要花费5个小时以上的时间才能执行。

如果有更好的方法可以实现,请指导我。

罗伯托·埃尔南德斯

一种选择是使用嵌入式日历,以便您可以创建自己的日历表达式。

我举个例子

SQL> BEGIN
dbms_scheduler.create_schedule('my_schedule_c_1', repeat_interval =>
  'FREQ=DAILY; BYHOUR=05,10,15,20; BYMINUTE=00; BYSECOND=00; ');
dbms_scheduler.create_schedule('my_schedule_c_2', repeat_interval =>
  'FREQ=DAILY; BYDAY=SAT,SUN; BYHOUR=05,10; BYMINUTE=00; BYSECOND=00;');
END;
/  2    3    4    5    6    7

PL/SQL procedure successfully completed.

SQL> begin
   DBMS_SCHEDULER.create_schedule ('MY_CALC', repeat_interval =>'my_schedule_c_1, my_schedule_c_2');
END;
/  2    3    4

PL/SQL procedure successfully completed.

SQL>

然后,您只需要将此时间表应用于您的工作

SQL> begin
  2  DBMS_SCHEDULER.CREATE_JOB
(
   job_name        => 'TEST_JOB'
  ,start_date      => SYSDATE
  3    ,repeat_interval => 'MY_CALC'
  4    ,end_date        => NULL
  ,job_class       => 'DEFAULT_JOB_CLASS'
  ,job_type        => 'PLSQL_BLOCK'
  5    6    7    8    9   10    ,enabled         => TRUE
  ,job_action      => 'BEGIN NULL; END;'
  ,comments        => 'TEST JOB'
); 11   12   13
 14  end;
 15  /

PL/SQL procedure successfully completed.

SQL>

这样,我的工作将使用MAIN_CALC计划运行,该计划是两个不同频率的组合。

当然,您总是可以创建两个作业,但是在11g中,没有创建不兼容性的选项,这是DBMS_SCHEDULER 12c及以后版本中的一个对象,它阻止作业开始直到另一个作业完成。

我的建议是,使用嵌入有多个频率的日程表日历

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章