错误描述:
ORA-12012: error on auto execute of job 123
ORA-12005: may not schedule automatic refresh for times in the past
意思是:job号为123的任务,本次执行完job的时间比下次计划开始执行的时间晚。比如:
本次执行完JOB的时间是2014-8-21 23:01:00 计划下次执行时间是2014-8-21 23:00:00
这样就会报错。
显然,造成这种问题的出现是由于:每次JOB的执行时间大于interval的设置。
查看当前设置
begin
sys.dbms_job.submit(job => :job,
what => 'p_tab_partition_mgr(sysdate+1,sysdate+1);',
next_date => to_date('21-08-2014 23:00:00', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'trunc(sysdate + 1) - 1 / 24');
commit;
end;
/
可以看到,job每天晚上23点执行,而下次执行时间, trunc(sysdate + 1) - 1 / 24')又是当前执行开始的时间23点。所以必然报错。
修改后:
declare
jobno number :=123;
begin
sys.dbms_job.broken(job => 123,broken => true);
sys.dbms_job.submit(job => jobno,
what => 'p_tab_partition_mgr(sysdate+1,sysdate+1);',
next_date => to_date('21-08-2014 23:00:00', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'trunc(sysdate + 2) - 1 / 24');
commit;
end;
修改为隔天的23点开始执行就对了。
trunc(sysdate + 2) - 1 / 24')