Oracle(三)之任務排程

2021-09-02 06:44:12 字數 3525 閱讀 8985

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