oracle终止dbms调度,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服务的状况是无关的.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值