【Oracle】基於SCHEDULER的job的詳解

來源:互聯網
上載者:User

昨天講了關於scheduler的參數的設定詳解,今天來看一下對於急於scheduler的job的設定的詳解,首先還是來看一下基本的建立指令碼:

sys.dbms_scheduler.create_job(

job_name => '"SYS"."REBUILD_JOB1"',

program_name => '"SYS"."EMP_IND_REBUILD"',

schedule_name => '"SYS"."DAILYREBUILD"',

job_class => '"DEFAULT_JOB_CLASS"',

comments => 'rebuild',

Auto_drop => TRUE,

enabled => TURE);

 

job_name:job的所屬使用者及job的名字

program_name:這個job調用的program的名字

schedule_name:這個job使用的scheduler的名字

job_class:這個job所在的job class的名字

註:Job Class 相當於建立了一個job 組,DBA 可以將那些具有相同特性的job,統統放到相同的Job Classes中,然後通過對Job Class 應用ORACLE 中的"資源使用計劃"特性,就可以對這些job 執行過程中所需要的資源分派情況進行管理。

comments:對於這個job的描述

auto_drop:是否在job為completed之後自動drop掉

enabled:是否生效

 

還有一些參數在job建立的時候並不能進行設定,下面進行說明:

raise_events:job會觸發的一些event,預設是不會觸發event的,不過可以在job建立後進行修改。

l job_started :JOB啟動;

l job_succeeded :JOB成功結束;

l job_failed :JOB執行失敗;

l job_broken :JOB被置為BROKEN狀態;

l job_completed :JOB達到最大運行次數,或者啟動並執行結束日期;

l job_stopped :JOB被STOP_JOB過程置為停止執行的狀態;

l job_sch_lim_reached :Job的schedule達到限定值;

l job_disabled :JOB被置於DISABLE狀態;

l job_chain_stalled :運行於chain的JOB被置於CHAIN_STALLED狀態;

l job_all_events :含上述提到的所有類型;

l job_run_completed :由於Job運行出錯、成功結束或被手動停止。

其修改的方式如下所示:

sys.dbms_scheduler.set_attribute( name => '"SYS"."REBUILD_JOB1"', attribute => 'raise_events', value => dbms_scheduler.job_started + dbms_scheduler.job_succeeded + dbms_scheduler.job_failed + dbms_scheduler.job_broken + dbms_scheduler.job_completed + dbms_scheduler.job_stopped + dbms_scheduler.job_sch_lim_reached + dbms_scheduler.job_disabled + dbms_scheduler.job_chain_stalled);

 

 

restartable:在job執行失敗的時候是否進行自動重新執行。

sys.dbms_scheduler.set_attribute( name => '"SYS"."REBUILD_JOB1"', attribute => 'restartable', value => TRUE);

 

 

schedule_limit:允許job的最大延遲時間,如果系統的負載很重,在到了schedule設定的已耗用時間時無法取得相應的資源去執行job,這時候如果schedule的設定為null的時候,job會在取得資源之後再執行,無論等多長時間都會等待執行。而如果設定了schedule_limit設定之後如果超過設定值則job這次執行會跳過。此次執行不會定義為執行失敗,在job log中會有反應。其取值範圍由1分鐘到99天

sys.dbms_scheduler.set_attribute( name => '"SYS"."REBUILD_JOB1"', attribute => 'schedule_limit', value => numtodsinterval(20, 'minute'));

 

 

max_run_duration:設定job啟動並執行有效時間,如果設定了某個值,則在到達該值時調度會報JOB_OVER_MAX_DUR事件,然後由事件處理器決定是否要繼續。

sys.dbms_scheduler.set_attribute( name => '"SYS"."REBUILD_JOB1"', attribute => 'max_run_duration', value => numtodsinterval(10, 'minute'));

 

max_runs:job執行的最大次數,範圍1到1000000,預設為空白(即意味著job會重複執行,或者到達job執行的end_date,或者達到指定失敗的次數)。一旦達到設定的最大值,job將會disable並且狀態變更為COMPLETED。

sys.dbms_scheduler.set_attribute( name => '"SYS"."REBUILD_JOB1"', attribute => 'max_runs', value => 10);

 

instance_stickiness:只用於rac資料庫。預設為true,設定為true,則job會運行在負載最輕的節點上;如果某節點關閉或負載太重,則不會啟動新job,而是有另一個節點來執行該job。

 

job_priority:在同一個class,job執行的優先順序,預設為3。範圍從1到5。

sys.dbms_scheduler.set_attribute( name => '"SYS"."REBUILD_JOB1"', attribute => 'job_priority', value => 2);

 

 

max_failures:允許job失敗的次數,範圍1到1000000,預設為空白。

sys.dbms_scheduler.set_attribute( name => '"SYS"."REBUILD_JOB1"', attribute => 'max_failures', value => 5);

 

job_weight:如果使用了並存執行技術,這個參數可以設定job中執行sql的並行度。

sys.dbms_scheduler.set_attribute( name => '"SYS"."REBUILD_JOB1"', attribute => 'job_weight', value => 5);

 

 

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.