安排 Oracle 作业
Posted
技术标签:
【中文标题】安排 Oracle 作业【英文标题】:Schedule Oracle Jobs 【发布时间】:2014-01-09 12:58:59 【问题描述】:我创建了一个触发我的存储过程在每天早上 5 点运行的 oracle 作业。但我想限制该作业仅在周一至周五早上 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】:不要使用 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;
注意:您应该始终使用带时区的时间戳作为开始日期;否则,当您的国家/地区切换夏令时时,您的工作将在不同时间运行。
【讨论】:
以上是关于安排 Oracle 作业的主要内容,如果未能解决你的问题,请参考以下文章