安排Oracle Jobs

时间:2014-01-09 12:59:00

标签: oracle dbms-job

我创建了一个oracle作业,触发我的存储过程每天凌晨5点运行。但我想限制工作只在周一到周五凌晨5点运行。这是我写的工作:

 DECLARE 
   X NUMBER;
 BEGIN  
   SYS.DBMS_JOB.SUBMIT  ( 
     job       => X    ,
     what      => 'BEGIN  usp_procedurename(''ENV''); END;'   ,
     next_date => to_date('10/01/2014 05:00:00','dd/mm/yyyy hh24:mi:ss')   ,
     interval  => 'SYSDATE + 1'   ,
     no_parse  => FALSE  );  
   SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
   COMMIT;
 END;

我是否可以通过某种方式更改限制作业仅在周一至周五凌晨5点运行的时间间隔,还是有其他方式?

对此有任何帮助表示赞赏。 感谢

1 个答案:

答案 0 :(得分:3)

不要使用dbms_job - 它早已被弃用并被dbms_scheduler取代。

使用dbms_scheduler,这应该做你想要的:

begin
  dbms_scheduler.create_job(
      job_name => 'MY_JOB'
     ,job_type => 'PLSQL_BLOCK'
     ,job_action => 'BEGIN  usp_procedurename(''ENV''); END;'
     ,start_date      => to_timestamp_tz('2014-01-09 12:00:00 Europe/Berlin',
                                         'yyyy-mm-dd hh24:mi:ss tzr')
     ,repeat_interval => 'FREQ=DAILY;BYHOUR=05;BYDAY=Mon,Tue,Wed,Thu,Fri'
     ,enabled => TRUE
     ,comments => 'my job (runs Monday to Friday at 05:00)');
end;

注意:您应始终使用带时区的时间戳作为开始日期;否则,当您的国家/地区从夏令时切换到夏令时时,您的工作将在不同的时间运行。