oracle interval 每天,Oracle Scheduler中的repeat_interval

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

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=>'insertintoempselect*fromscott.empwhereempno=7396',REPEAT_INTERVAL=>'freq=minutely',ENABLED=>TRUE);

END;

/

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

loading.png

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

2、interval_clause

语法如下:

interval_clause="INTERVAL""="intervalnum

intervalnum=1through99

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

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

BEGIN

SYS.DBMS_SCHEDULER.CREATE_JOB(JOB_NAME=>'tst1',REPEAT_INTERVAL=>'freq=minutely;interval=2',ENABLED=>TRUE);

END;

/

再次查询间隔时间

loading.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',REPEAT_INTERVAL=>'freq=monthly;bymonth=3,6,9,12',ENABLED=>TRUE);

END;

/

loading.png

从上面的查询可以看出,下次job执行的时间是17年6月15日,因为现在是5月,所以job并没有执行。

4、byweekno_clause

byweekno_clause="BYWEEKNO""="weeknumber_list

weeknumber_list=weeknumber(","weeknumber)*

weeknumber=[minus]weekno

weekno=1through53

该参数用于指定在一年中的第几周执行job,每年有52或53周,该参数只针对FREQ=YEARLY有效。

5、byyearday_clause

byyearday_clause="BYYEARDAY""="yearday_list

yearday_list=yearday(","yearday)*

yearday=[minus]yeardaynum

yeardaynum=1through366

该参数指定一年中的第几天执行job,有效值为1-366,也可以在数字前指定"-"代表该年的倒数第几天如"-2"表示12月30日。

示例:指定每年的倒数第二天执行job

BEGIN

SYS.DBMS_SCHEDULER.CREATE_JOB(JOB_NAME=>'tst1',REPEAT_INTERVAL=>'freq=yearly;byyearday=-2',ENABLED=>TRUE);

END;

/

loading.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=1through53/*iffrequencyisyearly*/

daynum=1through5/*iffrequencyismonthly*/

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',REPEAT_INTERVAL=>'freq=monthly;byday=3FRI',ENABLED=>TRUE);

END;

/

loading.png

从上图可以看出一次执行时间为17年5月19日,为5月第三周的周五。

8、bymonthday_clause

语法如下:

bymonthday_clause="BYMONTHDAY""="monthday_list

monthday_list=monthday(","monthday)*

monthday=[minus]monthdaynum

monthdaynum=1through31

指定每月的第几天执行job,有效值为1-31,也可以使用"-"符号指定该月的倒数第几天。

示例:指定每月的倒数第二天执行job

BEGIN

SYS.DBMS_SCHEDULER.CREATE_JOB(JOB_NAME=>'tst1',REPEAT_INTERVAL=>'freq=hourly;bymonthday=-2',ENABLED=>TRUE);

END;

/

loading.png

如上图所示,下次执行job的时间为5月30日,为5月的倒数第2天。

9、byhour_clause、byminute_clause、bysecond_clause

语法如下:

byhour_clause="BYHOUR""="hour_list

hour_list=hour(","hour)*

hour=0through23

byminute_clause="BYMINUTE""="minute_list

minute_list=minute(","minute)*

minute=0through59

bysecond_clause="BYSECOND""="second_list

second_list=second(","second)*

second=0through59

这些参数指定job执行时的具体的时、分、秒。

byhour指定几点,byminute指定几分,bysecond指定几秒

示例:每天1:20:30执行job

BEGIN

SYS.DBMS_SCHEDULER.CREATE_JOB(JOB_NAME=>'tst1',REPEAT_INTERVAL=>'freq=daily;interval=1;byhour=1;byminute=20;bysecond=30',ENABLED=>TRUE);

END;

/

loading.png

从上图可以看出,一次执行的时间为指定的5月16日1:20:30。

以上只介绍了部分参数,也只有部分参数给了示例,具体参数的使用可以在实际的生产过程中去尝试。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`user_scheduler_jobs` 是 Oracle 数据库的一个系统表,用于存储所有用户定义的调度器作业的信息。您可以使用该表来查询、创建、修改和删除调度器作业。以下是一些使用 `user_scheduler_jobs` 的示例: 1. 查询所有调度器作业的信息: ```sql SELECT * FROM user_scheduler_jobs; ``` 该查询将返回所有用户定义的调度器作业的详细信息,包括作业名称、作业类型、作业状态、开始时间、重复间隔等。 2. 创建一个新的调度器作业: ```sql BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'my_job', job_type => 'PLSQL_BLOCK', job_action => 'BEGIN my_procedure; END;', start_date => SYSTIMESTAMP, repeat_interval => 'FREQ=DAILY;BYHOUR=10;BYMINUTE=0;BYSECOND=0' ); END; ``` 该代码将创建一个名为 `my_job` 的新调度器作业,该作业将在每天上午10点运行一次。 3. 修改一个已存在的调度器作业: ```sql BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE ( name => 'my_job', attribute => 'repeat_interval', value => 'FREQ=WEEKLY;BYDAY=TUE;BYHOUR=14;BYMINUTE=30;BYSECOND=0' ); END; ``` 该代码将修改名为 `my_job` 的调度器作业的重复间隔,将其更改为每周二下午2:30运行一次。 4. 删除一个已存在的调度器作业: ```sql BEGIN DBMS_SCHEDULER.DROP_JOB ( job_name => 'my_job' ); END; ``` 该代码将删除名为 `my_job` 的调度器作业。 以上是一些示例,您可以根据您的具体需求使用 `user_scheduler_jobs` 表和相关的调度器存储过程来管理您的调度器作业。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值