oracle任務排程概述
在oracle中任務排程指某一執行程式在特定的時間被週期性的執行。oracle把任務排程稱為job。而乙個基本的job由兩方面組成
program和schedule
。其中program指週期性執行的可執行程式,其中可包括pl\sql匿名塊,儲存過程、函式、包以及作業系統的可執行指令碼和外部程式等等。schedule指的是,排程program執行的週期。該週期既可以基於特定時間被排程,也可以基於某一事件被排程。因而job總體上可分為兩大類,基於時間的job和基於事件的job。在oracle 10g之前,採用dbms_job程式包來完成任務排程的相關工作。在oracle 10g之後,oracle推出了功能更加強大的dbms_schedule來完成任務排程工作,主要是由於dbms_schedule能夠基於事件進行任務排程而dbms_job無法基於事件進行排程(筆者個人淺見,待驗證)!
基於時間的job 建立program截圖
administration->programs->create
begin
dbms_scheduler.create_program(
program_name=>'hr.insert_sysdate', program_action=>'begin
insert into hr.job_test values(sysdate); commit; end',
program_type=>'plsql_block', number_of_arguments=>0,
comments=>'insert sysdate into table', enabled=>true); end;
其中program型別裡有3個選項分別代表
plsql_block:表示該程式為可執行的pl\sql匿名塊 stored_porcedure:表示程式為儲存過程、函式或程式包 executable:表示程式為位於作業系統上的可執行指令碼或程式
在repeating部分,我們指定啟動的頻率,在指定啟動頻率時應採用日曆表示式。起格式由3部分組成:頻率、間隔、特定時間點。每隔2天:freq=dayly;interval=2 每隔30妙:freq=secondly;interval=30 每週的第一天:freq=weekly;bymonthday=1 每月的最後一天:freq=monthly;bymonthday=-1
建立schedule截圖
administration->schedules->create
建立schedule的sql如下
begin
sys.dbms_scheduler.create_schedule(
repeat_interval => 'freq=minutely;interval=5', start_date => systimestamp at time zone '+8:00', comments => 'start every 5 minutes', schedule_name => '"hr"."insert_sche"'); end;
其中schedule type
中可選擇
schedule
的型別
standard
:為標準的
schedule
型別,需要使用者自行定義
schedule
的時間
use pre-defined schedule:
使用之前定義過的
schedule
standard using pl\sql for repeated interval:
使用pl\sql
編寫schedule
的時間
use pre-defined window:
使用之前定義的
window
event:
使用基於時間的
schedule
job裡的options選項
priority:
在相同的
job class
中分配資源的等級。
schedule limit(minutes):
計畫執行的任務如果在計畫時間內沒有被執行則在
schedule limit
規定的時間內重新執行。該選項只對重複執行的任務有效。
maximum runs:
任務執行成功次數達到
maximum runs
指定的次數後任務則不再執行
maximum failures:
持續執行的任務可失敗的最大次數,達到
maximum failures
指定的值後該任務自動失效
job weight:
該job
所支援的最大並行查詢
instance stickiness:
應用在rac
環境中。如果設定為
true
,那麼該
job將在負載最輕的例項上執行。如果設定為
flase
,將在第乙個有效的節點上執行嗯該
job。
建立job的sql如下
begin
sys.dbms_scheduler.create_job( job_name => '"hr"."insert_job"',
program_name => 'hr.insert_sysdate', schedule_name => 'hr.insert_sche', job_class => 'default_job_class',
comments => 'insert sysdate into table', auto_drop => false, enabled => false);
sys.dbms_scheduler.set_attribute( name => '"hr"."insert_job"',
attribute => 'schedule_limit', value => numtodsinterval(1, 'minute'));
sys.dbms_scheduler.set_attribute( name => '"hr"."insert_job"', attribute => 'job_priority', value => 2);
sys.dbms_scheduler.set_attribute( name => '"hr"."insert_job"', attribute => 'max_runs', value => 10);
sys.dbms_scheduler.set_attribute( name => '"hr"."insert_job"', attribute => 'max_failures', value => 3);
sys.dbms_scheduler.set_attribute( name => '"hr"."insert_job"', attribute => 'job_weight', value => 4);
sys.dbms_scheduler.set_attribute( name => '"hr"."insert_job"', attribute => 'instance_stickiness', value => true);
end;
oracle學習筆記之排程任務
scheduler 排程的學習 建立乙個表,除錯任務將每隔 30 秒向表內插入時間 create table schedule test timemod date select from schedule test order by timemod truncate table schedule t...
ORACLE任務排程例項
1 編寫定時任務儲存過程 別的儲存過程太長,貼個觸發器冒充下 create orreplace trigger tru accept abnormal state 狀態更新觸發器,當已整改時,級聯更新本條記錄的24小時或48小時狀態 before update on accept abnormal ...
Oracle任務排程概述
oracle任務排程概述 在oracle中任務排程指某一執行程式在特定的時間被週期性的執行。oracle把任務排程稱為job。而乙個基本的job由兩方面組成program和schedule。其中program指週期性執行的可執行程式,其中可包括pl sql匿名塊,儲存過程 函式 包以及作業系統的可執...