SCHEDULER使用详解

来源:互联网 发布:c语言源小程序代码大全 编辑:程序博客网 时间:2024/05/08 02:22

SCHEDULER使用详解:

 

创建SCHEDULER

BEGIN

sys.dbms_scheduler.create_schedule(

repeat_interval => ‘FREQ=DAILY;BYHOUR=15;BYMINUTE=0;BYSECOND=0’,

start_date => systimestamp at time zone ’+8:00’,

end_date => to_timestamp_tz(‘2014-03-15 +8:00’, ‘YYYY-MM-DD TZH:TZM’),

comments => ‘REBUILD INDEX’,

schedule_name => ‘“SYS”.”IDX_REBUILD”’);

END;

参数解释:

repeat_interval设置重复频率

FREQ(指定重复频率):

YEARLY:以年为单位,可以设置每年的哪天执行。INTERVAL重复次数。BYYEARDAY可以指定具体的日子。用1-365来表示每天,但到了闰年就是1-366。由于有二月这个不确定性的存在(例如如果设置69,则在平年指的是三月十号,闰年则会是三月九号),所以我们可以使用1-59来表示1月到228-307-1来表示2291231。之后BYHOURBYMINUTEBYSECOND可以用来指定运行的具体时刻。

其他的还有MONTHLYWEEKLYDAILYHOURLYMINUTELYSECONDLY

举例说明:

每年的114310日的下午3105秒执行,执行三年:

repeat_interval => ‘FREQ=YEARLY;INTERVAL=3;BYYEARDAY=14,-297;BYHOUR=15;BYMINUTE=10;BYSECOND=5’,

MONTHLY:以月为单位,设置每个月的哪天执行:

每个月的1日、3日下午3105秒执行,执行三个月:

repeat_interval => ‘FREQ=MONTHLY;INTERVAL=3;BYMONTHDAY=1,3;BYHOUR=15;BYMINUTE=10;BYSECOND=5’,

每周二周三下午3105秒执行,执行三周:

repeat_interval => ‘FREQ=WEEKLY;INTERVAL=3;BYDAY=TUE,WED;BYHOUR=15;BYMINUTE=10;BYSECOND=5’,

每天下午3105秒执行,执行三天

repeat_interval => ‘FREQ=DAILY;INTERVAL=3;BYHOUR=15;BYMINUTE=10;BYSECOND=5’,

从第一次执行的时候开始每小时执行一次,执行三次:(MINUTELYSECONDLY和此类似,就不写了)

repeat_interval => ‘FREQ=HOURLY;INTERVAL=3’,

调用当时执行一次,不重复执行:

repeat_interval => null,

 

 

 

start_date设置生效时间:

立即生效

start_date => systimestamp at time zone ’+8:00’,

2014-03-15 下午五点生效:

start_date => to_timestamp_tz(‘2014-03-15 17:00:00 +8:00’, ‘YYYY-MM-DD HH24:MI:SS TZH:TZM’),

 

end_date设置schedule失效时间:

如果没有失效时间则不用设置此行。

2014-03-15下午九点结束:

end_date => to_timestamp_tz(‘2014-03-15 21:10:00 +8:00’, ‘YYYY-MM-DD HH24:MI:SS TZH:TZM’),

 

comments 对于scheduler的一些描述,没有可以不写。

schedule_nameschedule的所属用户和名字

sys用户的,名字为IDX_REBUILD

schedule_name => ‘“SYS”.”IDX_REBUILD”’);

 

 

修改SCHEDULER

BEGIN

sys.dbms_scheduler.set_attribute( name => ‘“SYS”.”DAILYREBUILD”’, attribute => ‘repeat_interval’, value => ‘FREQ=WEEKLY;BYHOUR=14;BYMINUTE=0;BYSECOND=0’);

sys.dbms_scheduler.set_attribute( name => ‘“SYS”.”DAILYREBUILD”’, attribute => ‘start_date’, value => systimestamp at time zone ’+8:00’);

sys.dbms_scheduler.set_attribute( name => ‘“SYS”.”DAILYREBUILD”’, attribute => ‘end_date’, value => to_timestamp_tz(‘2014-03-15 +8:00’, ‘YYYY-MM-DD TZH:TZM’));

END;

 

name :修改的scheduler的所属用户以及名字

attribute:修改的参数名

value:修改后的参数值

 

 

删除SCHEDULER:

BEGIN

dbms_scheduler.drop_schedule( schedule_name => DAILYREBUILD, force => FALSE);

END;

只有两个参数

schedule_nameschedule的名字

force:如果是FALSE则如果有其他的job在使用这个schedule就不会删除这个schedule,如果是TRUE则不管有没有其他job使用这个schedule都会将这个schedule删除。