Oracle任務排程概述

2022-04-14 07:27:14 字數 4039 閱讀 8313

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匿名塊,儲存過程 函式 包以及作業系統的可...