202009 schedular中 repeat_interval的含义

本文深入解析Oracle Job调度机制,详述REPEAT_INTERVAL参数的高级用法,包括如何精确设定任务执行频率、周期及具体时间点,如每日特定时间、每周固定日子等。并通过实例展示如何利用FREQ、INTERVAL、BYDAY等关键字实现复杂调度需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

除了前面介绍Job和Schedule的REPEAT_INTERVAL参数时,提到该参数拥有FREQ以及INTERVAL两个关键字,其实除此之外,

还有如BYMONTH、BYWEEKNO、BYYEARDAY、BYDATE等等参数,可以用来进行更精确的定义,比如通过BYMONTH关键字指定调度运行的月份,BYDAY指定调度在哪天运行等等。

REPEAT_INTERVAL 参数的详细语法非常复杂,为了让大家更好的理解,我这里先举一些例子,大家先有个感官上的认识

1、设置任务仅在周5的时候运行

REPEAT_INTERVAL => ‘FREQ=DAILY; BYDAY=FRI’;

REPEAT_INTERVAL => ‘FREQ=WEEKLY; BYDAY=FRI’;

REPEAT_INTERVAL => ‘FREQ=YEARLY; BYDAY=FRI’;

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

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

REPEAT_INTERVAL => ‘FREQ=WEEKLY; INTERVAL=2; BYDAY=FRI’;

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

REPEAT_INTERVAL => ‘FREQ=MONTHLY; BYMONTHDAY=-1’;

4、设置任务在3月10日运行

REPEAT_INTERVAL => ‘FREQ=YEARLY; BYMONTH=MAR; BYMONTHDAY=10’;

REPEAT_INTERVAL => ‘FREQ=YEARLY; BYDATE=0310’;

上述两条语句功能相同。

5、设置任务每隔10天运行

REPEAT_INTERVAL => ‘FREQ=DAILY; INTERVAL=10’;

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

REPEAT_INTERVAL => ‘FREQ=DAILY; BYHOUR=16,17,18’;

7、设置任务在每月29日运行

REPEAT_INTERVAL => ‘FREQ=MONTHLY; BYMONTHDAY=29’;

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

REPEAT_INTERVAL => ‘FREQ=YEARLY; BYDAY=-1FRI’;

这里的配置可能稍微复杂点,大家先记着,后面会详细解释。

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

REPEAT_INTERVAL => ‘FREQ=HOURLY; INTERVAL=50’;

10、另外,你是否在怀念常规job中设置interval的简便,虽然功能较弱,但是设置操作非常简单,无须懊恼,其实SCHEDULER中的REPEAT_INTERVAL也完全可以按照那种方式设置,前面都说了,

REPEAT_INTERVAL实际上是指定周期,直接指定一个时间值,当然也是周期喽。

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

REPEAT_INTERVAL => ‘trunc(sysdate)+1’

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

REPEAT_INTERVAL => ‘trunc(sysdate)+7’

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

==
摘抄自: http://blog.itpub.net/31358702/viewspace-2154428/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值