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