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月到2月28,-307至-1来表示2月29到12月31。之后BYHOUR,BYMINUTE,BYSECOND可以用来指定运行的具体时刻。
其他的还有MONTHLY、WEEKLY、DAILY、HOURLY、MINUTELY、SECONDLY
举例说明:
每年的1月14和3月10日的下午3点10分5秒执行,执行三年:
repeat_interval => 'FREQ=YEARLY;INTERVAL=3;BYYEARDAY=14,-297;BYHOUR=15;BYMINUTE=10;BYSECOND=5',
MONTHLY:以月为单位,设置每个月的哪天执行:
每个月的1日、3日下午3点10分5秒执行,执行三个月:
repeat_interval => 'FREQ=MONTHLY;INTERVAL=3;BYMONTHDAY=1,3;BYHOUR=15;BYMINUTE=10;BYSECOND=5',
每周二周三下午3点10分5秒执行,执行三周:
repeat_interval => 'FREQ=WEEKLY;INTERVAL=3;BYDAY=TUE,WED;BYHOUR=15;BYMINUTE=10;BYSECOND=5',
每天下午3点10分5秒执行,执行三天
repeat_interval => 'FREQ=DAILY;INTERVAL=3;BYHOUR=15;BYMINUTE=10;BYSECOND=5',
从第一次执行的时候开始每小时执行一次,执行三次:(MINUTELY、SECONDLY和此类似,就不写了)
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_name:schedule的所属用户和名字
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_name:schedule的名字
force:如果是FALSE则如果有其他的job在使用这个schedule就不会删除这个schedule,如果是TRUE则不管有没有其他job使用这个schedule都会将这个schedule删除。