[轉(zhuǎn)]全面學(xué)習(xí)ORACLE Scheduler特性(2)管理jobs

          1.2  管理Jobs
          1.2.1  啟用Jobs
          前面創(chuàng)建JOB時(shí),由于未顯式的指定ENABLED參數(shù),因此即使指定了START_DATE,不過(guò)默認(rèn)情況下JOB不會(huì)自動(dòng)執(zhí)行。對(duì)于這種情況,DBMS_SCHEDULER包中提供了一個(gè)過(guò)程ENABLE,可以用來(lái)修改JOB的啟用狀態(tài),調(diào)用方式非常簡(jiǎn)單,例如:

          SQL> exec dbms_scheduler.enable(¨INSERT_TEST_TBL¨);

          PL/SQL procedure successfully completed.
          1.2.2  禁用Jobs
          DBMS_SCHEDULER.ENABLE 僅用來(lái)將JOB(其實(shí)不僅僅對(duì)JOB有效,對(duì)于CHAIN、PROGRAM等也有效)的啟用狀態(tài)置為T(mén)RUE。如果想將其啟用狀態(tài)置為FALSE?簡(jiǎn)單,還有一個(gè)與該功能對(duì)應(yīng)的過(guò)程:DBMS_SCHEDULER.DISABLE,例如:

          SQL> exec dbms_scheduler.disable(¨INSERT_TEST_TBL¨);

          PL/SQL procedure successfully completed.
          這兩個(gè)過(guò)程僅用來(lái)重置對(duì)象的狀態(tài),因此均可以無(wú)限次執(zhí)行,即使執(zhí)行時(shí)對(duì)象已經(jīng)被置為要指定的狀態(tài)。

          1.2.3  修改Jobs
          由于JOB的屬性眾多,難免時(shí)不時(shí)的可能會(huì)遇到需要修改的情況,比如說(shuō)前面創(chuàng)建JOB時(shí)不小心,指定要執(zhí)行的過(guò)程名輸入錯(cuò)誤(完全有可能,CREATE_JOB在創(chuàng)建時(shí)不會(huì)自動(dòng)檢查指定的過(guò)程是否有效,從這方面考慮,SCHEDULER不如普通JOB嚴(yán)謹(jǐn)哪),這種情況下就必然涉及到對(duì)JOB的修改(或者說(shuō)重定義),沒(méi)問(wèn)題,DBMS_SCHEDULER包中專(zhuān)門(mén)提供了一個(gè)過(guò)程SET_ATTRIBUTE,可以用來(lái)修改任務(wù)的屬性值。

          例如,修改剛剛創(chuàng)建的JOB:INSERT_TEST_TBL執(zhí)行的過(guò)程,執(zhí)行語(yǔ)句如下:

          SQL> exec dbms_scheduler.set_attribute(¨INSERT_TEST_TBL¨,¨JOB_ACTION¨,¨P_ INSERT INTOTEST¨);

          PL/SQL procedure successfully completed
          當(dāng)然啦,我們這里執(zhí)行的這條語(yǔ)句,執(zhí)行跟沒(méi)執(zhí)行沒(méi)有區(qū)別,此處僅做示例,大家表深究。

          SET_ATTRIBUTE 過(guò)程雖然僅有三個(gè)參數(shù),不過(guò)能夠修改的屬性值可是不少,以下列舉幾個(gè)較常用到的:

          LOGGING_LEVEL :指定對(duì)jobs執(zhí)行情況記錄的日志信息級(jí)別。
          SCHEDULER 管理的JOB對(duì)任務(wù)的執(zhí)行情況專(zhuān)門(mén)進(jìn)行了記錄,同時(shí)用戶(hù)還可以選擇日志中記錄信息的級(jí)別,有下列三種選擇:

          DBMS_SCHEDULER.LOGGING_OFF :關(guān)閉日志記錄功能;
          DBMS_SCHEDULER.LOGGING_RUNS :對(duì)任務(wù)的運(yùn)行信息進(jìn)行記錄;
          DBMS_SCHEDULER.LOGGING_FULL :記錄任務(wù)所有相關(guān)信息,不僅有任務(wù)的運(yùn)行情況,甚至連任務(wù)的創(chuàng)建、修改等也均將記入日志。
          提示:查看SCHEDULER管理的JOB,可以通過(guò)USER_SCHEDULER_JOB_LOG和USER_SCHEDULER_JOB_RUN_DETAILS兩個(gè)視圖中查詢(xún)

          RESTARTABLE :指定jobs運(yùn)行出錯(cuò)后,是否能夠適時(shí)重啟
          創(chuàng)建任務(wù)時(shí)如未明確指定,本參數(shù)默認(rèn)情況下設(shè)置為FALSE,如果設(shè)置為T(mén)RUE,就表示當(dāng)任務(wù)運(yùn)行時(shí)出錯(cuò),下次運(yùn)行時(shí)間點(diǎn)到達(dá)時(shí)仍會(huì)啟動(dòng),并且如果運(yùn)行仍然出錯(cuò),會(huì)繼續(xù)重新運(yùn)行,不過(guò)如果連接出錯(cuò)達(dá)到6次,該job就會(huì)停止。

          MAX_FAILURES :指定jobs最大連續(xù)出錯(cuò)次數(shù)
          該參數(shù)值可指定的范圍從1-1000000,默認(rèn)情況下該參數(shù)設(shè)置為NULL,表示無(wú)限制。達(dá)到指定出錯(cuò)次數(shù)后,該job會(huì)被自動(dòng)disable。

          MAX_RUNS :指定jobs最大運(yùn)行次數(shù)
          該參數(shù)值可指定的范圍從1-1000000,默認(rèn)情況下該參數(shù)設(shè)置為NULL,表示無(wú)限制(只是運(yùn)行次數(shù)無(wú)限制,實(shí)際job會(huì)否繼續(xù)運(yùn)行,仍受制于end_date以及max_failures等參數(shù)的設(shè)置)。達(dá)到指定運(yùn)行次數(shù)后,該job也將被自動(dòng)disable,并且狀態(tài)會(huì)被置為COMPLETED。

          JOB_TYPE :指定job執(zhí)行的任務(wù)的類(lèi)型
          有四個(gè)可選值:¨PLSQL_BLOCK¨, ¨STORED_PROCEDURE¨, ¨EXECUTABLE¨, and ¨CHAIN¨。

          JOB_ACTION :指定job執(zhí)行的任務(wù)
          這一參數(shù)所指定的值依賴(lài)于JOB_TYPE參數(shù)中的值,比如說(shuō)JOB_TYPE設(shè)置為¨STORED_PROCEDURE¨,那么本參數(shù)值中指定的一定是ORACLE中的過(guò)程名。

          START_DATE :指定job初次啟動(dòng)的時(shí)間
          END_DATE :指定job停止運(yùn)行的時(shí)間
          本參數(shù)又與AUTO_DROP相關(guān)聯(lián),如果AUTO_DROP設(shè)置為T(mén)RUE的話(huà),那么一旦job到達(dá)停止運(yùn)行的時(shí)間,該job就會(huì)被自動(dòng)刪除,否則的話(huà)job任何存在,不過(guò)狀態(tài)被修改為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等等,這些參數(shù)所代表的意義此處不一一詳述,感興趣的朋友可以查閱相關(guān)官方文檔,或者等待本系列文章的外傳,黑黑。

          僅從這些可設(shè)置屬性就可以看出,Scheduler管理的job確實(shí)非常靈活,上述提到了這些參數(shù),均可以使用DBMS_SCHEDULER.SET_ATTRIBUTE過(guò)程進(jìn)行設(shè)置。

          另外需要注意一點(diǎn),除了用戶(hù)手動(dòng)創(chuàng)建的jobs之外,數(shù)據(jù)庫(kù)在運(yùn)行過(guò)程中也有可能自動(dòng)創(chuàng)建jobs。對(duì)于這類(lèi)jobs除非必要,否則不建議進(jìn)行修改。至于如何區(qū)分jobs是用戶(hù)創(chuàng)建,還是數(shù)據(jù)庫(kù)自動(dòng)創(chuàng)建,可以通過(guò)*_SCHEDULER_JOBS視圖的SYSTEM列來(lái)確定,如果該列顯示為T(mén)RUE,則表示由系統(tǒng)創(chuàng)建

          1.2.4  執(zhí)行Jobs
          雖然說(shuō)jobs大多都應(yīng)該是自動(dòng)執(zhí)行,不過(guò)經(jīng)過(guò)前面的示例,大家想必也認(rèn)識(shí)到了,并不是說(shuō)創(chuàng)建了jobs它就會(huì)自動(dòng)執(zhí)行,是否能夠真正自動(dòng)執(zhí)行并不是由你的主觀意愿就能直接決定,而是由jobs自身的多個(gè)相關(guān)屬性決定。

          關(guān)于jobs自動(dòng)執(zhí)行的話(huà)題相信看完前面的內(nèi)容后,應(yīng)該都知道如何設(shè)置,下面主要演示,如何手動(dòng)調(diào)用jobs并執(zhí)行,這其中,當(dāng)然少不了DBMS_SCHEDULER包。例如,手動(dòng)執(zhí)行前面剛剛創(chuàng)建的job:INSERT_TEST_TBL:

          SQL> exec dbms_scheduler.run_job(¨INSERT_TEST_TBL¨);

          PL/SQL procedure successfully completed
          Jobs 每執(zhí)行一次,無(wú)論成功或失敗,均會(huì)在*_SCHEDULER_JOB_LOG中生成一條對(duì)應(yīng)的記錄(前提是LOGGING_LEVEL屬性值未設(shè)置為DBMS_SCHEDULER.LOGGING_OFF),同時(shí),用戶(hù)也可以通過(guò)*_SCHEDULER_JOB_RUN_DETAILS視圖查詢(xún)job執(zhí)行的詳細(xì)信息。

          1.2.5  停止Jobs
          停止job可以使用DMBS_SCHEDULER.STOP_JOB過(guò)程,例如:

          SQL> exec dbms_scheduler.stop_job(¨INSERT_TEST_TBL¨);

          PL/SQL procedure successfully completed
          注意,STOP_JOB過(guò)程不僅僅是更新job的狀態(tài),而是停止當(dāng)前正在執(zhí)行的任務(wù),如果你處理的任務(wù)當(dāng)前未在運(yùn)行的話(huà),那么執(zhí)行STOP_JOB過(guò)程,會(huì)觸發(fā)ORA-27366錯(cuò)誤。

          停止Jobs也會(huì)觸發(fā)一條任務(wù)的日志信息,對(duì)于執(zhí)行停止操作的job,其*_SCHEDULER_JOB_LOG視圖的OPERATION會(huì)記錄為¨STOPPED¨,ADDITIONAL_INFO列中記錄的信息類(lèi)似¨REASON="Stop job called by user: username"¨。

          1.2.6  刪除Jobs
          刪除創(chuàng)建的job就比較簡(jiǎn)單了,直接執(zhí)行DBMS_SCHEDULER.DROP_JOB過(guò)程即可,例如:

          SQL> exec dbms_scheduler.drop_job(¨INSERT_TEST_TBL¨);

          PL/SQL procedure successfully completed
          刪除jobs并不是修改該job中某個(gè)字段的標(biāo)記值,而是直接刪除其在數(shù)據(jù)字典中的字義,因此被刪除的job如果未來(lái)發(fā)現(xiàn)仍然需要,只能重建,而無(wú)法通過(guò)其它方式快速恢復(fù)。不過(guò),刪除jobs的操作,并不會(huì)級(jí)聯(lián)刪除這些job曾經(jīng)執(zhí)行過(guò)的日志信息。

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

          本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/didiaodezhu/archive/2009/12/16/5019747.aspx

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


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2011年12月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          THE TRUTH IS OUT THERE.
          本博客純屬摘錄
          若有雷同
          實(shí)屬正常
          只為記錄
          不為其它
          望原創(chuàng)作者見(jiàn)諒

          常用鏈接

          留言簿

          隨筆檔案

          文章分類(lèi)

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 松江区| 临夏县| 延庆县| 灵山县| 莲花县| 山丹县| 鸡东县| 通州市| 金阳县| 乌鲁木齐县| 玉龙| 萝北县| 安义县| 许昌市| 大邑县| 富源县| 肇源县| 孙吴县| 阜平县| 南京市| 和林格尔县| 厦门市| 锡林郭勒盟| 如东县| 萨迦县| 澄迈县| 江永县| 高密市| 石泉县| 咸丰县| 康保县| 凤山县| 临城县| 施甸县| 娱乐| 富锦市| 宣恩县| 永兴县| 康定县| 外汇| 芦溪县|