Oracle中job執行出錯后重試機制


1、每次重試時間都是遞增的,第一次2分鍾,4分鍾,8分鍾,16分鍾 ... 依此類推。
2、當超過1440分鍾,也就是24小時的時候,固定的重試時間為1天。
3、超過16次重試后,job 就會被標記為broken ,next_date 為4000-1-1,也就是不再進行job重試。
4、oracle數據庫重試的時間到達設定的下次執行時間后,以設定的job執行時間為准。
 
查看job基礎信息及運行信息:

select * from user_jobs;
select * from dba_jobs_running;
select * from dba_jobs;

 

job執行的存儲過程異常,導致job執行失敗,查詢select * from dba_jobs的failures字段加1,同時重試執行時間為本次執行時間+2分鍾,如果再次失敗,由重試的時間為上次開始執行時間+4 , 再次失敗則+8,2的階乘,以此類推,直到失敗16次后,job就broken屬性為Y,不再嘗試重試。

某一次執行成功后,dba_jobs中failures字段清0

 

job的執行時間往后推遲很長時間原因:

job執行時間間隔沒有加trunc截取精度,而是直接使用sysdate+1/(24*60),由於job啟動需要時間或掃描精度,導致下次執行時間用的標准時間已經不是啟動JOB的時間,而是延遲幾秒,執行一次就延遲幾秒,執行次數多了延遲就長了

 

記一次深坑:

Oracle job進程,包含協調進程(主進程)以及奴隸進程(子進程)

job_queue_processes取值范圍為0到1000,總共可創建多少個job進程由job_queue_processes參數來決定

job_queue_processes默認值為0,默認情況下任意方式創建的job都不會運行,只有大於0的時候,才會有進程去執行job !!!

job_queue_processes線程由DBMS_JOB與DBMS_SCHEDULER共享

查詢方法:select value from v$parameter where name like '%job_queue_processes%' 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM