[轉]全面學習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執行情況記錄的日志信息級別。
          SCHEDULER 管理的JOB對任務的執行情況專門進行了記錄,同時用戶還可以選擇日志中記錄信息的級別,有下列三種選擇:

          DBMS_SCHEDULER.LOGGING_OFF :關閉日志記錄功能;
          DBMS_SCHEDULER.LOGGING_RUNS :對任務的運行信息進行記錄;
          DBMS_SCHEDULER.LOGGING_FULL :記錄任務所有相關信息,不僅有任務的運行情況,甚至連任務的創建、修改等也均將記入日志。
          提示:查看SCHEDULER管理的JOB,可以通過USER_SCHEDULER_JOB_LOG和USER_SCHEDULER_JOB_RUN_DETAILS兩個視圖中查詢

          RESTARTABLE :指定jobs運行出錯后,是否能夠適時重啟
          創建任務時如未明確指定,本參數默認情況下設置為FALSE,如果設置為TRUE,就表示當任務運行時出錯,下次運行時間點到達時仍會啟動,并且如果運行仍然出錯,會繼續重新運行,不過如果連接出錯達到6次,該job就會停止。

          MAX_FAILURES :指定jobs最大連續出錯次數
          該參數值可指定的范圍從1-1000000,默認情況下該參數設置為NULL,表示無限制。達到指定出錯次數后,該job會被自動disable。

          MAX_RUNS :指定jobs最大運行次數
          該參數值可指定的范圍從1-1000000,默認情況下該參數設置為NULL,表示無限制(只是運行次數無限制,實際job會否繼續運行,仍受制于end_date以及max_failures等參數的設置)。達到指定運行次數后,該job也將被自動disable,并且狀態會被置為COMPLETED。

          JOB_TYPE :指定job執行的任務的類型
          有四個可選值:¨PLSQL_BLOCK¨, ¨STORED_PROCEDURE¨, ¨EXECUTABLE¨, and ¨CHAIN¨。

          JOB_ACTION :指定job執行的任務
          這一參數所指定的值依賴于JOB_TYPE參數中的值,比如說JOB_TYPE設置為¨STORED_PROCEDURE¨,那么本參數值中指定的一定是ORACLE中的過程名。

          START_DATE :指定job初次啟動的時間
          END_DATE :指定job停止運行的時間
          本參數又與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 completed
          Jobs 每執行一次,無論成功或失敗,均會在*_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曾經執行過的日志信息。

          =======================================

          本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/didiaodezhu/archive/2009/12/16/5019747.aspx

          posted on 2011-12-13 22:47 DHC 閱讀(184) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2011年12月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          公告

          THE TRUTH IS OUT THERE.
          本博客純屬摘錄
          若有雷同
          實屬正常
          只為記錄
          不為其它
          望原創作者見諒

          常用鏈接

          留言簿

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阿荣旗| 年辖:市辖区| 鄂伦春自治旗| 郯城县| 怀化市| 五常市| 海宁市| 旌德县| 论坛| 荆州市| 渝中区| 辛集市| 乌拉特后旗| 南和县| 霍林郭勒市| 大渡口区| 息烽县| 开阳县| 吉安市| 兴文县| 陆丰市| 弋阳县| 顺平县| 绵竹市| 绥中县| 全椒县| 离岛区| 田阳县| 浦城县| 玛曲县| 平和县| 景宁| 襄城县| 波密县| 休宁县| 宁明县| 静宁县| 宁远县| 柯坪县| 武陟县| 玉林市|