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刪除。