如何设置Repeat Interval参数

44次阅读
没有评论

共计 4511 个字符,预计需要花费 12 分钟才能阅读完成。

如何设置 Repeat Interval 参数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面丸趣 TV 小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

  设置 Repeat Interval

Job 和 Schedule 中 REPEAT_INTERVAL 参数都是用来控制执行的频率或周期,虽然说周期是一个时间性概念,不过 REPEAT_INTERVAL 指定的时候并不是一个时间值,而是由一组关键字描述的时间。

除了前面介绍 Job 和 Schedule 的 REPEAT_INTERVAL 参数时,提到该参数拥有 FREQ 以及 INTERVAL 两个关键字,其实除此之外,还有如 BYMONTH、BYWEEKNO、BYYEARDAY、BYDATE 等等参数,可以用来进行更精确的定义,比如通过 BYMONTH 关键字指定调度运行的月份,BYDAY 指定调度在哪天运行等等。

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 [ include_clause]

[ exclude_clause] [ intersect_clause]

frequency_clause =  FREQ   =  ( predefined_frequency | user_defined_frequency )

predefined_frequency =  YEARLY  |  MONTHLY  |  WEEKLY  |  DAILY  | 

  HOURLY  |  MINUTELY  |  SECONDLY

user_defined_frequency = named_schedule

==============================

interval_clause =  INTERVAL   =  intervalnum

 intervalnum = 1 through 99

bymonth_clause =  BYMONTH   =  monthlist

 monthlist = monthday (  ,  monthday)*

 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

byweekno_clause =  BYWEEKNO   =  weeknumber_list

 weeknumber_list = weeknumber (  ,  weeknumber)*

 weeknumber = [minus] weekno

 weekno = 1 through 53

byyearday_clause =  BYYEARDAY   =  yearday_list

 yearday_list = yearday (  ,  yearday)*

 yearday = [minus] yeardaynum

 yeardaynum = 1 through 366

bydate_clause =  BYDATE   =  date_list

 date_list = date (  ,  date)*

 date = [YYYY]MMDD [ offset | span ]

bymonthday_clause =  BYMONTHDAY   =  monthday_list

 monthday_list = monthday (  ,  monthday)*

 monthday = [minus] monthdaynum

 monthdaynum = 1 through 31

byday_clause =  BYDAY   =  byday_list

 byday_list = byday (  ,  byday)*

 byday = [weekdaynum] day

 weekdaynum = [minus] daynum

 daynum = 1 through 53 /* if frequency is yearly */

 daynum = 1 through 5 /* if frequency is monthly */

 day =  MON  |  TUE  |  WED  |  THU  |  FRI  |  SAT  |  SUN

byhour_clause =  BYHOUR   =  hour_list

 hour_list = hour (  ,  hour)*

 hour = 0 through 23

byminute_clause =  BYMINUTE   =  minute_list

 minute_list = minute (  ,  minute)*

 minute = 0 through 59

bysecond_clause =  BYSECOND   =  second_list

 second_list = second (  ,  second)*

 second = 0 through 59

bysetpos_clause =  BYSETPOS   =  setpos_list

 setpos_list = setpos (,  setpos)*

 setpos = [minus] setpos_num

 setpos_num = 1 through 9999

==============================

include_clause =  INCLUDE   =  schedule_list

exclude_clause =  EXCLUDE   =  schedule_list

intersect_clause =  INTERSECT   =  schedule_list

schedule_list = schedule_clause (,  schedule_clause)*

schedule_clause = named_schedule [ offset ]

named_schedule = [schema  .] schedule

periods_clause =  PERIODS   =  periodnum

byperiod_clause =  BYPERIOD   =  period_list

period_list = periodnum (,  periodnum)*

periodnum = 1 through 100

==============================

offset = (+  |  –) [OFFSET:] duration_val

span = (+  |  –  |  ^)  SPAN:  duration_val

duration_val = dur-weeks | dur_days

dur_weeks = numofweeks  W

dur_days = numofdays  D

numofweeks = 1 through 53

numofdays = 1 through 376

minus =  –

这个语法形式看起来复杂无比,其实实用起来很简单,之所以看起来复杂,是因为其功能太过灵活 (之前的三思系列笔记中,已经阐述过灵活与复杂的关系),这里不准备逐条解释每一个语法细节,下面将着重通过一些常用设置,希望能够更有助于广大同仁的理解。

例如:设置任务仅在周 5 的时候运行:

REPEAT_INTERVAL =   FREQ=DAILY; BYDAY=FRI

REPEAT_INTERVAL =   FREQ=WEEKLY; BYDAY=FRI

REPEAT_INTERVAL =   FREQ=YEARLY; BYDAY=FRI

上述三条语句虽然指定的关键字小有差异,不过功能相同。

设置任务隔一周运行一次,并且仅在周 5 运行:

REPEAT_INTERVAL =   FREQ=WEEKLY; INTERVAL=2; BYDAY=FRI

设置任务在当月最后一天运行:

REPEAT_INTERVAL =   FREQ=MONTHLY; BYMONTHDAY=-1

设置任务在 3 月 10 日运行:

REPEAT_INTERVAL =   FREQ=YEARLY; BYMONTH=MAR; BYMONTHDAY=10
REPEAT_INTERVAL =   FREQ=YEARLY; BYDATE=0310

上述两条语句功能相同。

设置任务每 10 隔天运行:

REPEAT_INTERVAL =   FREQ=DAILY; INTERVAL=10

设置任务在每天的下午 4、5、6 点时运行:

REPEAT_INTERVAL =   FREQ=DAILY; BYHOUR=16,17,18

设置任务在每月 29 日运行:

REPEAT_INTERVAL =   FREQ=MONTHLY; BYMONTHDAY=29

设置任务在每年的最后一个周 5 运行:

REPEAT_INTERVAL =   FREQ=YEARLY; BYDAY=-1FRI

设置任务每隔 50 个小时运行:

REPEAT_INTERVAL =   FREQ=HOURLY; INTERVAL=50

另外,你是否在怀念常规 job 中设置 interval 的简便,虽然功能较弱,但是设置操作非常简单,无须懊恼,其实 SCHEDULER 中的 REPEAT_INTERVAL 也完全可以按照那种方式设置,前面都说了,REPEAT_INTERVAL 实际上是指定周期,直接指定一个时间值,当然也是周期喽。

比如说,设置任务每天执行一次,也可以设置 REPEAT_INTERVAL 参数值如下:

REPEAT_INTERVAL =   trunc(sysdate)+1

又比如设置任务每周执行一次:

REPEAT_INTERVAL =   trunc(sysdate)+7

不过需要注意,这种方式仅用于创建 SCHEDULER 中 jobs 时使用,不能用于 schedule。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注丸趣 TV 行业资讯频道,感谢您对丸趣 TV 的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计4511字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)