全面學習ORACLE Scheduler特性(2)管理jobs
1.2 管理Jobs
1.2.1 啟用Jobs
前面建立JOB時,由於未顯式的指定ENABLED引數,因此即使指定了START_DATE,不過預設情況下JOB不會自動執行。對於這種情況,DBMS_SCHEDULER包中提供了一個過程ENABLE,可以用來修改JOB的啟用狀態,呼叫方式非常簡單,例如:
SQL> exec dbms_scheduler.enable(¨INSERT_TEST_TBL¨);
PL/SQL procedure successfully completed.1.2.2 禁用Jobs
DBMS_SCHEDULER.ENABLE 僅用來將JOB(其實不僅僅對JOB有效,對於CHAIN、PROGRAM等也有效)的啟用狀態置為TRUE。如果想將其啟用狀態置為FALSE?簡單,還有一個與該功能對應的過程:DBMS_SCHEDULER.DISABLE,例如:
SQL> exec dbms_scheduler.disable(¨INSERT_TEST_TBL¨);
PL/SQL procedure successfully completed.這兩個過程僅用來重置物件的狀態,因此均可以無限次執行,即使執行時物件已經被置為要指定的狀態。
1.2.3 修改Jobs
由於JOB的屬性眾多,難免時不時的可能會遇到需要修改的情況,比如說前面建立JOB時不小心,指定要執行的過程名輸入錯誤(完全有可能,CREATE_JOB在建立時不會自動檢查指定的過程是否有效,從這方面考慮,SCHEDULER不如普通JOB嚴謹哪),這種情況下就必然涉及到對JOB的修改(或者說重定義),沒問題,DBMS_SCHEDULER包中專門提供了一個過程SET_ATTRIBUTE,可以用來修改任務的屬性值。
例如,修改剛剛建立的JOB:INSERT_TEST_TBL執行的過程,執行語句如下:
SQL> exec dbms_scheduler.set_attribute('INSERT_TEST_TBL','JOB_ACTION','P_ INSERT INTOTEST');
PL/SQL procedure successfully completed當然啦,我們這裡執行的這條語句,執行跟沒執行沒有區別,此處僅做示例,大家表深究。
SET_ATTRIBUTE 過程雖然僅有三個引數,不過能夠修改的屬性值可是不少,以下列舉幾個較常用到的:
- LOGGING_LEVEL :指定對jobs執行情況記錄的日誌資訊級別。
- DBMS_SCHEDULER.LOGGING_OFF :關閉日誌記錄功能;
- DBMS_SCHEDULER.LOGGING_RUNS :對任務的執行資訊進行記錄;
- DBMS_SCHEDULER.LOGGING_FULL :記錄任務所有相關資訊,不僅有任務的執行情況,甚至連任務的建立、修改等也均將記入日誌。
- RESTARTABLE :指定jobs執行出錯後,是否能夠適時重啟
- MAX_FAILURES :指定jobs最大連續出錯次數
- MAX_RUNS :指定jobs最大執行次數
- JOB_TYPE :指定job執行的任務的型別
- JOB_ACTION :指定job執行的任務
- START_DATE :指定job初次啟動的時間
- END_DATE :指定job停止執行的時間
SCHEDULER 管理的JOB對任務的執行情況專門進行了記錄,同時使用者還可以選擇日誌中記錄資訊的級別,有下列三種選擇:
提示:檢視SCHEDULER管理的JOB,可以透過USER_SCHEDULER_JOB_LOG和USER_SCHEDULER_JOB_RUN_DETAILS兩個檢視中查詢
建立任務時如未明確指定,本引數預設情況下設定為FALSE,如果設定為TRUE,就表示當任務執行時出錯,下次執行時間點到達時仍會啟動,並且如果執行仍然出錯,會繼續重新執行,不過如果連線出錯達到6次,該job就會停止。
該引數值可指定的範圍從1-1000000,預設情況下該引數設定為NULL,表示無限制。達到指定出錯次數後,該job會被自動disable。
該引數值可指定的範圍從1-1000000,預設情況下該引數設定為NULL,表示無限制(只是執行次數無限制,實際job會否繼續執行,仍受制於end_date以及max_failures等引數的設定)。達到指定執行次數後,該job也將被自動disable,並且狀態會被置為COMPLETED。
有四個可選值:¨PLSQL_BLOCK¨, ¨STORED_PROCEDURE¨, ¨EXECUTABLE¨, and ¨CHAIN¨。
這一引數所指定的值依賴於JOB_TYPE引數中的值,比如說JOB_TYPE設定為¨STORED_PROCEDURE¨,那麼本引數值中指定的一定是ORACLE中的過程名。
本引數又與AUTO_DROP相關聯,如果AUTO_DROP設定為TRUE的話,那麼一旦job到達停止執行的時間,該job就會被自動刪除,否則的話job任何存在,不過狀態被修改為COMPLETED。
除此之外,其它還包括MAX_RUN_DURATION,JOB_WEIGHT,INSTANCE_STICKINESS,STOP_ON_WINDOW_CLOSE,JOB_PRIORITY,SCHEDULE_LIMIT,PROGRAM_NAME,NUMBER_OF_ARGUMENTS,SCHEDULE_NAME,REPEAT_INTERVAL,JOB_CLASS,COMMENTS,AUTO_DROP,EVENT_SPEC,RAISE_EVENTS等等,這些引數所代表的意義此處不一一詳述,感興趣的朋友可以查閱相關官方文件,或者等待本系列文章的外傳,黑黑。
僅從這些可設定屬性就可以看出,Scheduler管理的job確實非常靈活,上述提到了這些引數,均可以使用DBMS_SCHEDULER.SET_ATTRIBUTE過程進行設定。
另外需要注意一點,除了使用者手動建立的jobs之外,資料庫在執行過程中也有可能自動建立jobs。對於這類jobs除非必要,否則不建議進行修改。至於如何區分jobs是使用者建立,還是資料庫自動建立,可以透過*_SCHEDULER_JOBS檢視的SYSTEM列來確定,如果該列顯示為TRUE,則表示由系統建立
1.2.4 執行Jobs
雖然說jobs大多都應該是自動執行,不過經過前面的示例,大家想必也認識到了,並不是說建立了jobs它就會自動執行,是否能夠真正自動執行並不是由你的主觀意願就能直接決定,而是由jobs自身的多個相關屬性決定。
關於jobs自動執行的話題相信看完前面的內容後,應該都知道如何設定,下面主要演示,如何手動呼叫jobs並執行,這其中,當然少不了DBMS_SCHEDULER包。例如,手動執行前面剛剛建立的job:INSERT_TEST_TBL:
SQL> exec dbms_scheduler.run_job(¨INSERT_TEST_TBL¨);
PL/SQL procedure successfully completedJobs 每執行一次,無論成功或失敗,均會在*_SCHEDULER_JOB_LOG中生成一條對應的記錄(前提是LOGGING_LEVEL屬性值未設定為DBMS_SCHEDULER.LOGGING_OFF),同時,使用者也可以透過*_SCHEDULER_JOB_RUN_DETAILS檢視查詢job執行的詳細資訊。
1.2.5 停止Jobs
停止job可以使用DMBS_SCHEDULER.STOP_JOB過程,例如:
SQL> exec dbms_scheduler.stop_job(¨INSERT_TEST_TBL¨);
PL/SQL procedure successfully completed注意,STOP_JOB過程不僅僅是更新job的狀態,而是停止當前正在執行的任務,如果你處理的任務當前未在執行的話,那麼執行STOP_JOB過程,會觸發ORA-27366錯誤。
停止Jobs也會觸發一條任務的日誌資訊,對於執行停止操作的job,其*_SCHEDULER_JOB_LOG檢視的OPERATION會記錄為¨STOPPED¨,ADDITIONAL_INFO列中記錄的資訊類似¨REASON="Stop job called by user: username"¨。
1.2.6 刪除Jobs
刪除建立的job就比較簡單了,直接執行DBMS_SCHEDULER.DROP_JOB過程即可,例如:
SQL> exec dbms_scheduler.drop_job(¨INSERT_TEST_TBL¨);
PL/SQL procedure successfully completed刪除jobs並不是修改該job中某個欄位的標記值,而是直接刪除其在資料字典中的字義,因此被刪除的job如果未來發現仍然需要,只能重建,而無法透過其它方式快速恢復。不過,刪除jobs的操作,並不會級聯刪除這些job曾經執行過的日誌資訊。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2147700/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Quartz job scheduler 學習quartz
- Kubernetes scheduler學習筆記筆記
- Oracle Database Scheduler整理OracleDatabase
- 正規表示式學習(2)---字元特性字元
- Oracle 任務管理之 ----program(程式)---scheduler(計劃)--Job(任務)Oracle
- OceanBase學習之路11|體驗 DDL 新特性(Oracle 模式)Oracle模式
- Scheduler in Oracle Database 10g(轉)OracleDatabase
- Flutter狀態管理--Getx學習2Flutter
- Oracle定時任務dbms_schedulerOracle
- 深入理解 RxJava2:Scheduler(2)RxJava
- 史上最全學習率調整策略lr_scheduler
- 學習使用PM2管理nodejs程式NodeJS
- oracle排程程式作業dbms_schedulerOracle
- oracle使用DBMS_SCHEDULER排程作業Oracle
- LightDB 22.4 新特性之相容Oracle sqluldr2OracleSQL
- Kubernetes – Jobs
- Laravel JobsLaravel
- React Scheduler 原始碼詳解(2)React原始碼
- Automatic Reference Counting(ARC)特性學習(iOS5新特性學習之五)iOS
- Python學習之高階特性Python
- 讓 PM 全面理解深度學習深度學習
- Quartz.NET 2.x 文件翻譯 - Lesson 2:Jobs 和 Triggersquartz
- jobs 命令示例
- cocos2D-x初探學習筆記(31)2.1新特性CCPhysicsSprite筆記CSS
- oracle11g: Scheduler Maintenance Tasks or Autotasks (Doc ID 756734.1)OracleAINaN
- Oracle sysman.mgmt_jobs導致資料庫自動重啟Oracle資料庫
- Oracle學習總結Oracle
- Oracle學習路線Oracle
- Oracle 21c新特性預覽與日常管理相關的幾個新特性Oracle
- 學習Rust泛型與特性Rust泛型
- C#特性學習筆記C#筆記
- JDK 1.8 新特性學習(Stream)JDK
- Java1.8新特性學習Java
- Oracle特性總結Oracle
- Oracle 20c 新特性:XGBoost 機器學習演算法和 AutoML 的支援Oracle機器學習演算法TOML
- Python 3.8 新特性全面解讀Python
- 雲端計算學習路線課程大綱資料:作業控制 jobs
- XV6學習筆記(2) :記憶體管理筆記記憶體
- [20191128]oracle Audit檔案管理2.txtOracle