ORA-12012: error on auto execute of job 25;ORA-12005: may not schedule automatic refresh for times in the past

  使用BethuneX做巡检,连续报如下错误:

--错误
Thu Oct 29 14:36:04 2020
Errors in file /u01/app/oracle/diag/rdbms/mtws/mtws/trace/mtws_j000_33913.trc:
ORA-12012: 自动执行作业 3 出错
ORA-12005: 不能安排过去时间的自动刷新
Errors in file /u01/app/oracle/diag/rdbms/mtws/mtws/trace/mtws_j000_33913.trc:
ORA-12012: error on auto execute of job 25
ORA-12005: may not schedule automatic refresh for times in the past

  首先从报错判断跟JOB相关,排查过程:

1、首先使用oerr ora 12012 ,oerr ora 12005命令查看

 分析:INTERVAL的值+JOB开始运行的时间,算出下次执行时间在当前时间之前,所以报错ORA-12005: 不能安排过去时间的自动刷新。要想理解这个得知道JOB内部的工作。

2、度娘查询,通过https://blog.csdn.net/stevendbaguo/article/details/77770955 确定JOB的工作流程

JOB的工作流程:
    1.JOB在运行结束之后才会更新next_date,但是计算的方法是JOB刚开始的时间加上interval设定的间隔
    2.如果在执行完JOB之后的时间比按照this_date+interval计算出的时间更晚一些,那么next_date就更新为当前时间,也就是几乎会立刻再重新执行JOB。
    3.如果一个job执行failure后,oracle会尝试重新执行,若16次尝试后还是failure,则oracle会将这个job的broken设为true,即停掉这个job。
    当job失败后,系统会在1分钟后重新运行这个JOB,如果还是失败,就在和第1次失败间隔2分钟的时候继续运行这个JOB,如果还是失败,就在和 第2次失败相隔4分钟后运行这个JOB,直到 失败间隔时间≥interval(JOB正常工作的时间设置参数)后,系统检测的时间间隔就为interval.直到第16次失败就会将这个job置为 broken。

    所以原因也许是interval设置的不合理,也许是JOB执行的时间太长。

3、到dba_jobs表中查询报警JOB情况

  select job,log_user,schema_user,what,LAST_DATE,LAST_SEC,THIS_DATE,THIS_SEC,NEXT_DATE,NEXT_SEC,INTERVAL  from dba_jobs where job in  (34,25);

  select job,NEXT_DATE,what,INTERVAL  from dba_jobs where job in  (3,25);

  

   发现INTERVAL中的值异常,参考http://blog.itpub.net/29346172/viewspace-2199878/ 发现应该为类似 TRUNC(SYSDATE +1) + (3*60+10)/(24*60) 这样的格式,判断上图中特殊字符应该为括号。

  告知客户考虑重建JOB修复。

  

4、其他

  该问题并未完全吃透,应该掌握JOB的创建过程、方式,JOB相关表的功能作用,INTERVAL设置等。

参考:

1、定位错误:https://blog.csdn.net/stevendbaguo/article/details/77770955

2、dba_jobs字段说明:https://www.cnblogs.com/uzipi/p/5590161.html

3、执行间隔interval运行频率设置:https://blog.csdn.net/qq_30270931/article/details/81865875

原文地址:https://www.cnblogs.com/peixk/p/13899446.html