Oracle数据库JOB失败如何解决
数据库版本:11.2.0.3
测试说明:这里创建一个运行过程中一定会出错的日志表和程序,用于运行作业。这里,只要每次执行作业时记录视图user_jobs中的next_date,就可以推断出作业执行失败后的重试模式。
为了测试作业的重试规则,我做了以下工作
日志表和序列:
create table job_exec_logs(id number, current_date日期、next_date 日期、失败次数、损坏的 varchar2( 2)) ;
创建序列 seq_job_exec_logs_id ;
测试过程
创建或替换过程 pro_my_test
开始
插入 job_exec_logs 选择
seq_job_exec_logs_id.nextval 、 sysdate 、 next_date 、 failure 、 从 user_jobs 中中断;
提交;
立即执行 'select * from ddddsfs' ;
结束;
ddddsfs表示不存在,也就是说只要运行pro_my_test存储过程,最后就会出错(但是日志表还是可以正常插入的)
p>
创建作业:
var 作业编号;
开始
sys.dbms_job.submit(job => :job,
什么=> 'pro_my_test ;',
next_date => sysdate,
间隔 => 'sysdate+5' );
提交;
结束;
/
整个测试过程其实没什么好说的。让作业自动运行即可,但是需要等待作业的下一次重试时间。
最终测试结果:
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、失败、从 user_jobs 中中断
5 个顺序,首先由 4 个空值组成);
TRUNC((NEXT_DATE-LAG(NEXT_DATE,1)OVER(ORDER BY 4))*24*60)
------ -------------------------------------------------------- ----- < /p>
; 1440
已选择 13 行。
以上结果和作者的其他测试可以确定:
1.每次重试时间都是递增的。第一次2分钟、4分钟、8分钟、16分钟……等等。
2.当超过1440分钟(即24小时)时,固定重试时间为1天。
3.作者还通过其他实验得知,超过16次重试后,该作业将被标记为已损坏,并且next_date为4000-1-1,即不会再次尝试该作业。
4.甲骨文数据后基本重试时间达到设定的下次执行时间,以设定的作业执行时间为准。
以上就是《如何解决Oracle数据库JOB失败问题》一文的全部内容。感谢您的阅读!相信大家看完这篇文章都会有所收获。小编每天都会为您更新不同的知识。如果您想了解更多知识,请关注行业资讯频道。
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > Oracle数据库JOB失败如何解决