Oracle使用DBMS_JOB创建的数据库作业,遇到数据库关闭状态的调度

对SQL Server熟悉的朋友,应该都知道,SQL Server的作业是按照固定时刻来设置调度的,比如设置为每日23:00运行,如果此时,恰逢服务器关机,或者SQLServerAgent服务不在运行,则本次作业将不会执行,直到下次满足调度条件再执行.
而Oracle的JOB是按照调度公式来设置下次执行时刻的.让我们来测试一下Oracle的JOB遇到关机或者数据库关闭的情况吧.

----创建表:
create table bak_testJob(runtime date);
----创建存储过程:
create or replace procedure bak_testJob_Proc
is
begin
  insert into bak_testJob values(sysdate);
end ;
----调用存储过程测试:
begin
  bak_testJob_Proc;
end ;
----测试成功(select 有结果),清空表:
delete from bak_testJob;
----创建作业(PL/SQL Developer交互界面创建)下面是相关操作对应的"View SQL"的结果:
begin
  sys.dbms_job.submit(job => :job,
                      what => 'bak_testJob_Proc;',
                      next_date => to_date('10-10-2011 19:15:00', 'dd-mm-yyyy hh24:mi:ss'),
                      interval => 'sysdate+5/1440');
  commit;
end;
/
----创建的JobID是101
----此时:19:09:45
19:10:00 停服务,模拟关机
19:19:35 开服务(仅启动主服务,监听服务,Agent服务,此处说明一下,Oracle9i一定要开启Agent服务,而Oracle10g则可以不启动OracleJobSchedule服务)
 
select * from bak_testJob;
结果:2011-10-10 19:19:38
看101作业:
Last date:2011-10-10 19:19:35
Next date:2011-10-10 19:24:37
----删除Job(PL/SQL Developer交互界面进行删除,语句略)
----删除procedure和table
drop procedure bak_testJob_Proc
select * from bak_testjob
1 2011-10-10 19:24:39
2 2011-10-10 19:19:38
drop table bak_testJob
 
----结论:Oracle会在数据库启动后,马上将应该调度的Job补充执行,此后按间隔公式定时调度

看来,与SQL Server跳过了本次作业调度不同,Oracle会记得补上.
另外,说明一点,作业是使用的dbms_job来创建的,不是使用Oracle10g新的dbms_schedule来创建的,所以,与OracleJobSchedule$SID服务的状况是无关的.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29512902/viewspace-1176323/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29512902/viewspace-1176323/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值