全面學習ORACLE Scheduler特性(1)建立jobs
http://blog.itpub.net/7607759/viewspace-610951/
所謂出於job而勝於job,說的就是Oracle 10g後的新特性Scheduler啦。在10g環境中,ORACLE建議使用Scheduler替換普通的job,來管理任務的執行。其實,將Scheduler描述成管理job的工具已經太過片面了,10G版本中新增的Scheduler絕不僅僅是建立任務這麼簡單。。。。
-
提示:ORACLE中管理Scheduler是透過DBMS_SCHEDULER包,本章也以此為切入點,透過詳細介紹DBMS_SCHEDULER包的使用,來演示如何使用Scheduler。似乎本末倒置了,沒關係,"三思筆記",俺的地盤俺做主。
一、使用Jobs
所謂JOBS,其實就是Scheduler管理的一個(或多個)任務的執行排程。
1.1 建立Jobs
透過DBMS_SCHEDULER包來建立Jobs,是使用其CREATE_JOB過程。在建立Job時,使用者可以指定要執行的任務,排程資訊(啥時候執行,執行週期,終止日期等)以及其它一些任務相關的屬性。CREATE_JOB過程呼叫還是比較簡單的,例如:
SQL> BEGIN
2 DBMS_SCHEDULER.CREATE_JOB (
3 job_name => 'INSERT_TEST_TBL',
4 job_type => 'STORED_PROCEDURE',
5 job_action => ' P_ INSERT INTOTEST ',
6 start_date => sysdate,
7 repeat_interval => 'FREQ=DAILY;INTERVAL=1');
8 END;
9 /
PL/SQL 過程已成功完成。事實上,有許可權的話,使用者也可以建立其它SCHEMA下的JOB,只需要在指定JOB_NAME時,按照schema.job_name的格式即可。注意喲,這種情況下建立的JOB,其CREATED與OWNER有可能並不相同的喲。
當使用CREATE_JOB過程建立JOB時,可指定的引數值很多,只不過多數情況下使用者僅指定部分引數即可滿足需求。
其中,上例中指定的引數,分別代表的含義如下:
- JOB_NAME :指定任務的名稱,必選值,注意要確保指定的名稱唯一。
-
JOB_TYPE :任務執行的操作型別,必選值,有下列幾個可選值:
- PLSQL_BLOCK :表示任務執行的是一個PL/SQL匿名塊。
- STORED_PROCEDURE :表示任務執行的是ORACLE過程(含PL/SQL PROCEDURE和JAVA PROCEDURE),本例中正是指定這一引數值。
- EXECUTABLE :表示任務執行的是一個外部程式,比如說作業系統命令。
- CHAIN :表示任務執行的是一個CHAIN。
- JOB_ACTION :任務執行的操作,必選值,應與JOB_TYPE型別中指定的引數相匹配。
- START_DATE :指定任務初次執行的時間,本引數可為空,當為空時,表示任務立刻執行,效果等同於指定該引數值為SYSDATE。
-
REPEAT_INTERVAL
:指定任務執行的頻率,比如多長時間會被觸發再次執行。本引數也可以為空,如果為空的話,就表示當前設定的任務只執行一次。REPEAT_INTERVAL引數需要好好說說,因為這一引數與標準JOB中的INTERVAL引數有很大區別,相比之下,REPEAT_INTERVAL引數的語法結構要複雜的多。其中最重要的是FREQ和INTERVAL兩個關鍵字。
- FREQ 關鍵字用來指定間隔的時間週期,可選引數有:YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, and SECONDLY,分別表示年、月、周、日、時、分、秒等單位。
- INTERVAL 關鍵字用來指定間隔的頻繁,可指定的值的範圍從1-99。
- 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。關於JOB CLASS的資訊就關注本系列的後續文章。
- ENABLED :指定任務是否啟用,預設值為FALSE。FALSE狀態表示該任務並不會被執行,除非被使用者手動呼叫,或者使用者將該任務的狀態修改為TRUE。
-
AUTO_DROP :當該標誌被置為TRUE時,ORACLE會在滿足條件時自動刪除建立的任務
- 任務已過期;
- 任務最大執行次數已達MAX_RUNS的設定值;
- 任務未指定REPEAT_INTERVAL引數,僅執行一次;
- COMMENTS :設定任務的註釋資訊,預設值為NULL。
比如說對於PL/SQL匿名塊,此處就可以放置PL/SQL塊的具體代表,類似DECLARE .. BEGIN ..END這類;如果是ORACLE過程,那麼此處應該指定具體的過程名,注意由於任務執行,即使過程中有OUT之類引數,實際執行時也不會有輸出的。
例如:REPEAT_INTERVAL=>'FREQ=DAILY;INTERVAL=1';表示每天執行一次,如果將INTERVAL改為7就表示每7天執行一次,效果等同於FREQ=WEEKLY;INTERVAL=1。
一般來說,使用DBMS_SCHEDULER.CREATE_JOB建立一個JOB,至少需要指定上述引數中的前3項。除此之外,還可以在CREATE_JOB時,指定下列引數:
該引數的預設值即為TRUE。使用者在執行CREATE_JOB過程時可以手動將該標誌指定為FALSE,當引數值設定為FALSE時,即使滿足上述提到的條件任務也不會被自動刪除,這種情況下,唯一能夠導致任務被刪除的情況,就是使用者主動呼叫DROP_JOB過程。
上面的例子建立了一個新的JOB,不過這個JOB與普通JOB不同,此時查詢USER_JOBS檢視是查不到剛剛建立的JOB的資訊,因為這個JOB是SCHEDULER管理的JOB。要查詢SCHEDULER管理的JOS,應該透過USER_SCHEDULER_JOBS(當然ALL_SCHEDULER_JOBS和DBA_SCHEDULER_JOBS也可以),例如:
SQL> select job_name,job_type,job_action,to_char(start_date,'yyyy-mm-dd hh24:mi:ss'),repeat_interval,enabled,state from user_scheduler_jobs;
JOB_NAME JOB_TYPE JOB_ACTION TO_CHAR(START_DATE, REPEAT_INTERVAL ENABL STATE
-------------------- ---------------- ------------------------- ------------------- ------------------------------ ----- ---------------
INSERT_TEST_TBL STORED_PROCEDURE P_INSERTINTOTEST 2009-07-27 13:46:50 FREQ=DAILY;INTERVAL=1 FALSE DISABLED不過,細心的盆友可能會發現,JOB雖然成功建立了,但卻並未執行,這是怎麼回事?其實原因很簡單,還記的前面介紹CREATE_JOB過程時提到的ENABLED引數嗎,當不顯式指定時,該引數的預設值為false,JOB自然不會執行了。如果遇到這類情形,如何修改呢?請繼續關注下一節。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2147698/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 全面學習ORACLE Scheduler特性(2)管理jobsOracle
- 全面學習ORACLE Scheduler特性(9)建立ChainsOracleAI
- 全面學習ORACLE Scheduler特性(5) Schedules排程Programs執行的JobsOracle
- 全面學習ORACLE Scheduler特性(5)Schedules排程Programs執行的JobsOracle
- 全面學習ORACLE Scheduler特性(4)建立和管理ScheduleOracle
- 全面學習ORACLE Scheduler特性(3)使用ProgramsOracle
- 全面學習ORACLE Scheduler特性(7)Scheduler丟擲的EventsOracle
- 全面學習ORACLE Scheduler特性(10)管理ChainsOracleAI
- 全面學習ORACLE Scheduler特性(11)使用Job ClassesOracle
- 全面學習ORACLE Scheduler特性(7)使用Events之Scheduler丟擲的EventsOracle
- 全面學習ORACLE Scheduler特性(6)設定Repeat Interval引數Oracle
- 全面學習ORACLE Scheduler特性(12)使用Windows和Window GroupsOracleWindows
- 全面學習ORACLE Scheduler特性(8)Application丟擲的EventsOracleAPP
- 全面學習ORACLE Scheduler特性(8)使用Events之Application丟擲的EventsOracleAPP
- 【JOB】Oracle JOB全面學習(DBMS_JOB和DBMS_SCHEDULER)Oracle
- 全面學習和應用ORACLE ASM特性OracleASM
- [轉載] 全面學習和應用ORACLE ASM特性(1),(2),(3)OracleASM
- 全面學習和應用ORACLE ASM特性--(1)關於asm例項OracleASM
- 全面學習oracle flashback特性(3.2)--Flashback Database操作示例OracleDatabase
- 全面學習oracle flashback特性(2.1)--Flashback Table之RECYCLEBINOracle
- Oracle Scheduler學習筆記分享Oracle筆記
- Oracle 10g Scheduler 特性Oracle 10g
- Oracle 12.2 建立分離JobsOracle
- 建立定時任務(Jobs) for oracleOracle
- oracle snapshot standby資料庫的scheduler jobs不執行Oracle資料庫
- 全面學習oracle flashback特性(2.3)--Flashback Table之注意事項Oracle
- 全面學習oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- [轉載] 全面學習和應用ORACLE ASM特性(4),(5)OracleASM
- 全面學習和應用ORACLE ASM特性--(2)管理asm磁碟OracleASM
- Oracle 10g Scheduler 全面介紹Oracle 10g
- 全面學習oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- 全面學習oracle flashback特性(1.1)--閃回查詢之As of timestampOracle
- 【徵文】全面學習oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- 全面學習oracle flashback特性(2.2)--Flashback Table之從UNDO中恢復Oracle
- 全面學習oracle flashback特性(1.5)--閃回查詢之制約因素Oracle
- 【徵文】全面學習oracle flashback特性(1.1)--閃回查詢之As of timestampOracle
- 【徵文】全面學習oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- Oracle Scheduler(1)用法簡介Oracle