1. 程式人生 > 實用技巧 >ORA-12012: error on auto execute of job 25;ORA-12005: may not schedule automatic refresh for times in the past

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,INTERVALfrom dba_jobswhere 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