oracle定時執行計劃任務
阿新 • • 發佈:2019-02-08
Oracle在10g版本以前,計劃任務用的是DBMS_JOB包,10g版本引入DBMS_SCHEDULER來替代先前的DBMS_JOB,在功能方面,它比DBMS_JOB提供了 更強大的功能和更靈活的機制/管理,但DBMS_JOB包的使用相對比較簡單,也基本能夠滿足定時執行計劃任務的需求,故接下來就先看看DBMS_JOB 包的使用方法。我們可以在命令視窗輸入show parameter job_queue_processes檢視資料庫中定時任務的最多併發數,一般設定為10(設定方 法:alter system set job_queue_processes=10),如果設為0,那麼資料庫定時作業是不會執行的。
dbms_scheduler.create_job (
job_name => '測試',
job_type => 'PLSQL_BLOCK',
job_action => 'insert into job_test values(sysdate);',
start_date => sysdate,
end_date => add_months(sysdate,12000),
repeat_interval => 'FREQ=MINUTELY; INTERVAL=1',
enabled => true,
comments => '定時執行計劃任務'
); end; 以上程式碼可以通過在PLSQL Developer中新建Jobs輕鬆設定:
引數含義如下: •JOB_NAME :指定任務的名稱,必選值,注意要確保指定的名稱唯一。 •JOB_TYPE :任務執行的操作型別,必選值,有下列幾個可選值: .PLSQL_BLOCK :表示任務執行的是一個PL/SQL匿名塊。 .STORED_PROCEDURE :表示任務執行的是ORACLE過程(含PL/SQL PROCEDURE和JAVA PROCEDURE)。 .EXECUTABLE :表示任務執行的是一個外部程式,比如說作業系統命令。 .CHAIN :表示任務執行的是一個CHAIN。 •JOB_ACTION :任務執行的操作,必選值,應與JOB_TYPE型別中指定的引數相匹配。比如說對於PL/SQL匿名塊,此處就可以放置PL/SQL塊的具體代表,類似DECLARE .. BEGIN ..END這類;如果是ORACLE過程,那麼此處應該指定具體的過程名,注意由於任務執行,即使過程中有OUT之類引數,實際執行時也不會有輸出的。 •START_DATE :指定任務初次執行的時間,本引數可為空,當為空時,表示任務立刻執行,效果等同於指定該引數值為SYSDATE。 •REPEAT_INTERVAL :指定任務執行的頻率,比如多長時間會被觸發再次執行。本引數也可以為空,如果為空的話,就表示當前設定的任務只執行一次。REPEAT_INTERVAL引數需要好好說說,REPEAT_INTERVAL引數的語法結構要複雜的多。其中最重要的是FREQ和INTERVAL兩個關鍵字。 .FREQ 關鍵字用來指定間隔的時間週期,可選引數有:YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY,分別表示年、月、周、日、時、分、秒等單位。 .INTERVAL 關鍵字用來指定間隔的頻繁,可指定的值的範圍從1-99。
例如:REPEAT_INTERVAL=>'FREQ=DAILY;INTERVAL=1';表示每天執行一次,如果將INTERVAL改為7就表示每7天執行一次,效果等同於FREQ=WEEKLY;INTERVAL=1。 一般來說,使用DBMS_SCHEDULER.CREATE_JOB建立一個JOB,至少需要指定上述引數中的前3項。除此之外,還可以在CREATE_JOB時,指定下列引數: •NUMBER_OF_ARGUMENTS :指定該JOB執行時需要附帶的引數的數量,預設值為0,注意當JOB_TYPE列值為PLSQL_BLOCK或CHAIN時,本引數必須設定為0,因為上述兩種情況下不支援附帶引數。 •END_DATE :指定任務的過期時間,預設值為NULL。任務過期後,任務的STATE將自動被修改為COMPLETED,ENABLED被置為FALSE。如果該引數設定為空的話,表示該任務永不過期,將一直按照REPEAT_INTERVAL引數設定的週期重複執行,直到達到設定的MAX_RUNS或MAX_FAILURES值。 •JOB_CLASS :指定任務關聯的CLASS,預設值為DEFAULT_JOB_CLASS。 •ENABLED :指定任務是否啟用,預設值為FALSE。FALSE狀態表示該任務並不會被執行,除非被使用者手動呼叫,或者使用者將該任務的狀態修改為TRUE。 •AUTO_DROP :當該標誌被置為TRUE時,ORACLE會在滿足條件時自動刪除建立的任務 ◦任務已過期; ◦任務最大執行次數已達MAX_RUNS的設定值; ◦任務未指定REPEAT_INTERVAL引數,僅執行一次; •COMMENTS :設定任務的註釋資訊,預設值為NULL。