首页 文章

使用DBMS_SCHEDULER repeat_interval在两天内运行一次任务

提问于
浏览
1

我正在尝试创建一个将在两天内运行一次的任务(删除一些缓存数据) . 这将在 Oracle 11g 上运行 . 到目前为止,我想出了以下匿名块:

begin 
 DBMS_SCHEDULER.CREATE_JOB (
     job_name             => 'clear_cache',
     job_type             => 'PLSQL_BLOCK',
     job_action           => 'begin delete from MY_CACHE;commit; end;',
     start_date           =>  to_date('19/09/2016','dd/mm/rrrr')+ 19/24,
     repeat_interval      => 'to_date(''19/09/2016'',''dd/mm/rrrr'')+ 2 + 19/24',
     enabled              => TRUE); 
  end;

但是,我不确定repeat_interval值..

假设我今天将运行此块( 15/09/2016 ),我希望 clear_cache 执行:

19/09/2016 at 7 p.m 
21/09/2016 at 7 p.m.
23/09/2016 at 7 p.m. 
etc

我知道,如果我使用

start_date           =>  sysdate,
 repeat_interval      => 'trunc(sysdate) + 7 + 7/24'

然后它将开始执行 today ,将在 7 p.m. 重复每一个 7 天,但我想要的是下周一开始并每隔一天重复一次,我不知道如何实现这一目标......

那么,我想知道究竟要投入 repeat_interval ......

谢谢 .

1 回答

  • 3

    值得使用built-in calendaring syntax而不是试图自己动手 . 通过声明您希望每天以2为间隔运行作业,它将每2天运行一次 .

    语法是 FREQ=DAILY;INTERVAL=2 ,如果您将开始日期设置为晚上7点,那么它将在您当前时区的那个时间开始 .

    start_date 参数是日期,因此您可以在此处使用实际日期或时间戳 .

    DBMS_SCHEDULER.CREATE_JOB (
         job_name             => 'clear_cache',
         job_type             => 'PLSQL_BLOCK',
         job_action           => 'begin delete from MY_CACHE; commit; end;',
         start_date           => timestamp '2016-09-19 19:00:00',
         repeat_interval      => 'FREQ=DAILY;INTERVAL=2',
         enabled              => TRUE);
    

相关问题