您好,登錄后才能下訂單哦!
今天小編給大家分享一下Oracle數據庫JOB失敗怎么解決的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
數據庫版本:11.2.0.3
測試說明:這里創建了一個日志表以及一個運行時必定出錯的procedure,用于job的運行。這里只要記錄下每次job執行時視圖user_jobs 中的 next_date就可以推斷出job 執行失敗后的重試規律。
為了測試job的重試規律我做了如下工作
日志表以及序列:
create table job_exec_logs (id number ,current_date date , next_date date ,failures number ,broken varchar2( 2)) ;
create sequence seq_job_exec_logs_id ;
測試procedure
create or replace procedure pro_my_test is
begin
insert into job_exec_logs select
seq_job_exec_logs_id.nextval , sysdate , next_date , failures , broken from user_jobs ;
commit ;
execute immediate 'select * from ddddsfs' ;
end ;
其中ddddsfs表示不存在的,也就是說只要運行pro_my_test存儲過程到最后都會出錯(但是日志表還是可以正常插入進去的)
創建job:
var job number ;
begin
sys.dbms_job.submit(job => :job,
what => 'pro_my_test ;',
next_date => sysdate,
interval => 'sysdate+5' );
commit;
end;
/
其實整個測試過程沒什么可說的,讓job自動運行即可,但是需要等待job下次重試時間。
最后測試的結果:
dexter@REPO>select trunc((next_date-lag(next_date,1) over (order by 4))*24*60) from (
2 select * from job_exec_logs
3 union all
4 select 11111, sysdate , next_date ,failures , broken from user_jobs
5 order by 4 nulls first) ;
TRUNC((NEXT_DATE-LAG(NEXT_DATE,1)OVER(ORDER BY 4))*24*60)
-------------------------------------------------------
2
4
8
15
32
64
128
256
512
1024
1440
1440
已選擇13行。
如上結果以及筆者的其他測試可以判斷出:
1、每次重試時間都是遞增的,第一次2分鐘,4分鐘,8分鐘,16分鐘 ... 依此類推。
2、當超過1440分鐘,也就是24小時的時候,固定的重試時間為1天。
3、筆者還經過其他實驗得知,超過16次重試后,job 就會被標記為broken ,next_date 為4000-1-1,也就是不再進行job重試。
4、oracle數據庫重試的時間到達設定的下次執行時間后,以設定的job執行時間為準。
以上就是“Oracle數據庫JOB失敗怎么解決”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。