欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Oracle Scheduler特性(4)创建和管理Schedule

程序员文章站 2022-07-04 14:00:37
三、使用schedules 10g 中新推出的scheduler可能确实会让很多初接触的朋友感觉晕头晕脑,相比之前的jobs,scheduler中新增的概念太多。比如说jobs,仍然可以理解成之前版...

三、使用schedules

10g 中新推出的scheduler可能确实会让很多初接触的朋友感觉晕头晕脑,相比之前的jobs,scheduler中新增的概念太多。比如说jobs,仍然可以理解成之前版本中的jobs,不过功能更加强大(注意10g中也仍然可以使用普通jobs,这是废话,相信看本篇文章的朋友目前应该还是这样在用),比如说program,指的是运行的程序(把要做什么单提出来了),比如说schedule,我将其翻译为调度(job我翻译为任务),定义执行的频率或者说周期。

3.1 创建和管理schedules

schedule ,中文直译的话应该理解成调度,从名字来看,它是一个逻辑实体(逻辑,还实体,好矛盾),就是说当创建了schedule之后,中就肯定存在这一对象,只不过这一对象是用来描述job的执行周期。

创建schedule可以通过dbms_scheduler.create_schedule过程,该过程支持的参数如下:

sql> desc dbms_scheduler.create_schedule;

parameter type mode default?

--------------- ------------------------ ---- --------

schedule_name varchar2 in

start_date timestamp with time zone in y

repeat_interval varchar2 in

end_date timestamp with time zone in y

comments varchar2 in y

各参数分别代表含意如下:

schedule_name :指定schedule名称,注意名称不能重复。

start_date :指定该调度的开始时间,可为空,当为空时表示该调度暂不起用。

repeat_interval :指定调度的执行频率或周期。

end_date :指定调度的结束时间,可为空,为空时就表示该调度将一直进行。

comments :注释信息。

这其中,比较有技术含量的是repeat_interval参数,对于这个参数大家应该不会太陌生,因为前面介绍jobs,也曾经提到过同名的参数,schedules中的repeat_interval参数和jobs中的repeat_interval参数功能完全相同,甚至参数格式也一模一样。

repeat_interval 参数的语法结构要复杂的多。其中最重要的是freq和interval两个关键字。

freq 关键字用来指定间隔的时间周期,可选参数有:yearly, monthly, weekly, daily, hourly, minutely, and secondly,分别表示年、月、周、日、时、分、秒等单位。

interval 关键字用来指定间隔的频繁,可指定的值的范围从1-99。

比如说,当指定repeat_interval=>'freq=daily;interval=1';就表示每天执行一次,如果将interval改为7就表示每7天执行一次,效果等同于freq=weekly;interval=1。

下面,创建一个schedule,指定调度为每周一次的频率,执行脚本如下:

sql> begin

2 dbms_scheduler.create_schedule (

3 schedule_name => 'my_first_schedule',

4 start_date => sysdate,

5 repeat_interval => 'freq=weekly; interval=1',

6 comments => 'every 1 weeks');

7 end;

8 /

pl/sql procedure successfully completed.

查询当前已经创建的schedules,可以通过*_scheduler_schedules视图(含dba_,all_,user_),例如,查看当前用户拥有的schedules,执行语句如下:

sql> select schedule_name,repeat_interval from user_scheduler_schedules;

schedule_name repeat_interval

------------------------------ ------------------------------

my_first_schedule freq=weekly; interval=1

如果要修改schedule属性的话,也是使用dbms_scheduler.set_attribute过程,该过程的调用方式前面已经多次演示过,这里就不再重复举例了,仅说明一点,对于schedule来说,能够修改的属性包括:repeat_interval、comments、end_date、start_date以及event_spec。

至于删除schedule,再简单不过,执行dbms_scheduler.drop_schedule过程即可,例如:

sql> exec dbms_scheduler.drop_schedule('my_first_schedule');

pl/sql procedure successfully completed.