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
建立program的sql如下
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:表示程式為位於作業系統上的可執行指令碼或程式。
建立schedule截圖
administration->schedules->create
在repeating部分,我們指定啟動的頻率,在指定啟動頻率時應採用日曆表示式。起格式由3部分組成:頻率、間隔、特定時間點。
下面是一些簡單例子
每隔2天:freq=dayly;interval=2
每隔30妙:freq=secondly;interval=30
每週的第一天:freq=weekly;bymonthday=1
每月的最後一天:freq=monthly;bymonthday=-1
每週日的凌晨1點:freq=weekly;byday=sun;byhour=1
建立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;
有了program和schedule之後我們可以把兩者結合起來建立乙個job。
利用已有program建立job
其中logging level為job執行記錄中的日誌級別,分別有以下3個級別:
log everything(full):表示記錄該job以及該job所在job class裡其他job的日誌資訊。
log job runs only(runs):表示記錄每次執行該job時產生的日誌資訊。
no logging(off):表示關閉日誌記錄功能。
這裡的job class的作用為,將乙個或多個作業與乙個resource manager使用者組關聯在一起,進行資源控制!
利用已有schedule建立job
其中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;
以下是排程任務執行的結果
sql> select * from job_test;
date1 ------------------- 2011-04-14 11:32:07 2011-04-14 11:37:07 2011-04-14 11:42:07 2011-04-14 11:47:07 2011-04-14 11:52:07 2011-04-14 11:57:07 2011-04-14 12:02:07 2011-04-14 12:07:07檢視任務的執行日誌
administration->jobs->history
預設情況下,資料庫自身定義了乙個purge_job的任務。該任務每天凌晨3點鐘啟動,清除30天前所產生的任務日誌。如果進行相應的修改可單擊「global attributes」或者直接修改"purge_job"。亦可單擊purge all logs手動刪除所有日誌。
Spark資源排程和任務排程概述
以standalone client模式為例,序列圖如下 圖中 1 6 資源排程 7 11 任務排程 spark資源排程和任務排程的流程 總結 taskscheduler不僅可以重試失敗的task,還可以重新執行緩慢的task,這是spark中的推測執行機制,預設關閉,對於資料清洗的場景要關閉,防止...
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匿名塊,儲存過程 函式 包以及作業系統的可...