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

[经验分享] Oracle Scheduler中的repeat_interval

[复制链接]

尚未签到

发表于 2018-9-6 13:18:43 | 显示全部楼层 |阅读模式
  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
  下面分别介绍几个常见的子名,更详细的信息可以参考官方文档:http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_sched.htm#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,做如下查询:
DSC0000.png

  从上面的查询可以看出,上一次执行和下一次执行的间隔大约为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;
  
/
  再次查询间隔时间
DSC0001.png 从上图中可以看出,间隔的时间约为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',
  
                                JOB_ACTION      => 'insert into emp select * from scott.emp where empno=7396',
  
                                REPEAT_INTERVAL => 'freq=monthly;bymonth=3,6,9,12',
  
                                ENABLED         => TRUE);
  
END;
  
/
DSC0002.png

  从上面的查询可以看出,下次job执行的时间是17年6月15日,因为现在是5月,所以job并没有执行。
  4、byweekno_clause
byweekno_clause = "BYWEEKNO" "=" weeknumber_list  
   weeknumber_list = weeknumber ( "," weeknumber)*
  
   weeknumber = [minus] weekno
  
   weekno = 1 through 53
  该参数用于指定在一年中的第几周执行job,每年有52或53周,该参数只针对FREQ=YEARLY有效。
  5、byyearday_clause
byyearday_clause = "BYYEARDAY" "=" yearday_list  
   yearday_list = yearday ( "," yearday)*
  
   yearday = [minus] yeardaynum
  
   yeardaynum = 1 through 366
  该参数指定一年中的第几天执行job,有效值为1-366,也可以在数字前指定"-"代表该年的倒数第几天如"-2"表示12月30日。
  示例:指定每年的倒数第二天执行job
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=yearly;byyearday=-2',
  
                                ENABLED         => TRUE);
  
END;
  
/
DSC0003.png

  从上图可以看出,job的执行时间为17年12月30日,即17年的倒数第二天。
  6、bydate_clause
  语法如下:
bydate_clause = "BYDATE" "=" date_list  
   date_list = date ( "," date)*
  
   date = [YYYY]MMDD [ offset | span ]
  该参数用于指定哪一天执行job,格式为[YYYY]MMDD。可以用span参数指定连续的日期如bydate=0110,0111,0112,0113,0114与bydate=0110+span:5d等价。可以用offset参数对日期做调整,增加/减少几天(d)或几周(w)如bydate=0520-offset:5d,表示指定5月15日执行。
  7、byday_clause
  语法如下:
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"
  指定一周中的周几执行job,使用单词的前三个字母指定。如果指定的freq=yearly,则daynum可以是1-53,指定一年的第几周。如果freq=monthly,则daynum可以是1-5,指定一个月的第几周。使用"-"表示倒数。
  示例:每个月第3周的周五执行job
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=monthly;byday=3 FRI',
  
                                ENABLED         => TRUE);
  
END;
  
/
DSC0004.png

  从上图可以看出一次执行时间为17年5月19日,为5月第三周的周五。
  8、bymonthday_clause
  语法如下:
bymonthday_clause = "BYMONTHDAY" "=" monthday_list  
   monthday_list = monthday ( "," monthday)*
  
   monthday = [minus] monthdaynum
  
   monthdaynum = 1 through 31
  指定每月的第几天执行job,有效值为1-31,也可以使用"-"符号指定该月的倒数第几天。
  示例:指定每月的倒数第二天执行job
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=hourly;bymonthday=-2',
  
                                ENABLED         => TRUE);
  
END;
  
/
DSC0005.png

  如上图所示,下次执行job的时间为5月30日,为5月的倒数第2天。
  9、byhour_clause、byminute_clause、bysecond_clause
  语法如下:
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
  这些参数指定job执行时的具体的时、分、秒。
  byhour指定几点,byminute指定几分,bysecond指定几秒
  示例:每天1:20:30执行job
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=daily;interval=1;byhour=1;byminute=20;bysecond=30',
  
                                ENABLED         => TRUE);
  
END;
  
/
DSC0006.png

  从上图可以看出,一次执行的时间为指定的5月16日1:20:30。
  以上只介绍了部分参数,也只有部分参数给了示例,具体参数的使用可以在实际的生产过程中去尝试。



运维网声明 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.iyunv.com/thread-564116-1-1.html 上篇帖子: oracle监听启动 下篇帖子: ORACLE-常用基础命令总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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