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,做如下查询:
从上面的查询可以看出,上一次执行和下一次执行的间隔大约为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;
/
再次查询间隔时间
从上图中可以看出,间隔的时间约为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',