Oracle Scheduler中的repeat

Oracle 11g版本中引入了Scheduler(调度)来取代之前版本的JOB(任务)。这里简单介绍一下Scheduler中repeat_interval参数的含义和使用方法。

repeat_interval从字面意思来说就是重复间隔。是指用户定义间隔多长时间执行指定的任务。如果不指定该参数,则任务只执行一次。

repeat_interval语法如下:

repeat_interval = regular_schedule | combined_schedule   regular_schedule = frequency_clause [";" interval_clause] [";" bymonth_clause] [";" byweekno_clause] [";" byyearday_clause] [";" bydate_clause] [";" bymonthday_clause] [";" byday_clause] [";" byhour_clause] [";" byminute_clause] [";" bysecond_clause] [";" bysetpos_clause] [";" include_clause] [";" exclude_clause] [";" intersect_clause][";" periods_clause] [";" byperiod_clause]   combined_schedule = schedule_list

下面分别介绍几个常见的子名,更详细的信息可以参考官方文档:#BABFBCEF

1、frequency_clause

语法如下:

frequency_clause = "FREQ" "=" ( predefined_frequency | user_defined_frequency ) predefined_frequency = "YEARLY" | "MONTHLY" | "WEEKLY" | "DAILY" |     "HOURLY" | "MINUTELY" | "SECONDLY" user_defined_frequency = named_schedule

指定重复的类型,这个参数必须指定。各个值的含意从字面就可以理解:YEARLY指定按年重复,MONTHLY指定按月重复,WEEKLY指定按周重复,DAILY指定按日重复,HOURLY指定按小时重复,MINUTELY指定按分钟重复,SECONDLY指定按秒重复。

示例:使用MINUTELY作为重复类型

BEGIN

  SYS.DBMS_SCHEDULER.CREATE_JOB(JOB_NAME        => 'tst1',

                                JOB_TYPE        => 'plsql_block',

                                JOB_ACTION      => 'insert into emp select * from scott.emp where empno=7396',

                                REPEAT_INTERVAL => 'freq=minutely',

                                ENABLED         => TRUE);

END;

/

创建一个名为tst1的job,做如下查询:

Oracle Scheduler中的repeat

从上面的查询可以看出,上一次执行和下一次执行的间隔大约为60s。

2、interval_clause

语法如下:

interval_clause = "INTERVAL" "=" intervalnum    intervalnum = 1 through 99

该参数指定重复的间隔,默认为1,取值范围是1-99

示例:使用MINUTELY作为重复类型,指定间隔2分钟

BEGIN

  SYS.DBMS_SCHEDULER.CREATE_JOB(JOB_NAME        => 'tst1',

                                JOB_TYPE        => 'plsql_block',

                                JOB_ACTION      => 'insert into emp select * from scott.emp where empno=7396',

                                REPEAT_INTERVAL => 'freq=minutely;interval=2',

                                ENABLED         => TRUE);

END;

/

再次查询间隔时间

Oracle Scheduler中的repeat

从上图中可以看出,间隔的时间约为2分钟。

3、bymonth_clause

语法如下:

bymonth_clause = "BYMONTH" "=" monthlist    monthlist = month ( "," month)*    month = numeric_month | char_month    numeric_month = 1 | 2 | 3 ...  12    char_month = "JAN" | "FEB" | "MAR" | "APR" | "MAY" | "JUN" |    "JUL" | "AUG" | "SEP" | "OCT" | "NOV" | "DEC"

该参数用于指定哪个月或哪几个月执行任务。可以用数字指定月份,也可以用三个字母简写指定月份。

示例:指定每3、6、9、12月执行job

BEGIN

  SYS.DBMS_SCHEDULER.CREATE_JOB(JOB_NAME        => 'tst1',

                                JOB_TYPE        => 'plsql_block',

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/27eb3dfe26c9344f6051657a0f5b407b.html