设为首页 收藏本站
查看: 806|回复: 0

[经验分享] Oracle Schedular Job 设置Repeat Interval

[复制链接]

尚未签到

发表于 2016-8-10 06:48:01 | 显示全部楼层 |阅读模式
  设置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。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-255480-1-1.html 上篇帖子: Oracle获取当天,当月,当年的数据 下篇帖子: Oracle随机生成数字存储过程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表