(12)使用Window和Window Group |
[君三思] 2009-9-8 |
七、使用Windows此Windows非彼Windows,通常說(shuō)的Windows是指蓋首富的操作系統(tǒng),而此處所說(shuō)的Windows,是指SCHEDULER特性中的一個(gè)子項(xiàng)。在SCHEDULER中,WINDOW對(duì)應(yīng)的是一個(gè)時(shí)間窗口的概念。 我們知道普通的jobs是沒(méi)有運(yùn)行時(shí)間管理地概念的,就是說(shuō)一個(gè)job啟動(dòng)之后,用戶只能被動(dòng)地等待其執(zhí)行,一直到其執(zhí)行地任務(wù)完成(或DBA手動(dòng)kill對(duì)應(yīng)進(jìn)程),在此期間,執(zhí)行的job將與其它活動(dòng)的進(jìn)程共同競(jìng)爭(zhēng)當(dāng)前系統(tǒng)中的資源。對(duì)于大型數(shù)據(jù)庫(kù)系統(tǒng),系統(tǒng)資源那可是相當(dāng)寶貴的無(wú)形資產(chǎn)哪,企能誰(shuí)說(shuō)用就用、想什么時(shí)候用就什么時(shí)候用,沒(méi)點(diǎn)兒計(jì)劃沒(méi)點(diǎn)兒節(jié)制這還了得。你還別說(shuō),在9i之前,還真就是這么回事兒,誰(shuí)想用就用,誰(shuí)也管不了,其中表示最甚的就是job。你是否想起了Job Classes,沒(méi)錯(cuò)定義Job Classes確實(shí)可以控制job能夠使用的資源,不過(guò)單單使用Job Classes并不能靈活的控制job在合適的時(shí)間使用適當(dāng)?shù)馁Y源。進(jìn)入10g之后,SCHEDULER中提供了WINDOW,事情終于有了緩解。 WINDOW 可以指定一個(gè)時(shí)間窗口,在此期間,通過(guò)與Job Classes的搭配組合,能夠有效控制job執(zhí)行時(shí)支配(使用)的資源。比如說(shuō)job通常是在凌晨服務(wù)器負(fù)載較低時(shí)執(zhí)行,那么就可以通過(guò)WINDOW設(shè)置在此期間,允許jobs使用更多的系統(tǒng)資源,而到了工作時(shí)間后,如果job仍未執(zhí)行完成,為其分配另一個(gè)有限的資源,以盡可能降低job執(zhí)行占用的資源對(duì)其它業(yè)務(wù)的影響。 1、創(chuàng)建Window創(chuàng)建Window有一個(gè)專門的過(guò)程:DBMS_SCHEDULER.CREATE_WINDOW進(jìn)行處理,該過(guò)程有兩種調(diào)用方式,如下: -- 基于SCHEDULE DBMS_SCHEDULER.CREATE_WINDOW ( window_name IN VARCHAR2, resource_plan IN VARCHAR2, schedule_name IN VARCHAR2, duration IN INTERVAL DAY TO SECOND, window_priority IN VARCHAR2 DEFAULT ¨LOW¨, comments IN VARCHAR2 DEFAULT NULL); -- 基于定義的調(diào)度 DBMS_SCHEDULER.CREATE_WINDOW ( window_name IN VARCHAR2, resource_plan IN VARCHAR2, start_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, repeat_interval IN VARCHAR2, end_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, duration IN INTERVAL DAY TO SECOND, window_priority IN VARCHAR2 DEFAULT ¨LOW¨, comments IN VARCHAR2 DEFAULT NULL);刨開(kāi)那些看著眼熟的,已經(jīng)認(rèn)識(shí)的,看參數(shù)名就知道其所代表含義的之外,下列幾個(gè)參數(shù)可能需要關(guān)注:
正如前面CREATE_WINDOW過(guò)程語(yǔ)法結(jié)構(gòu)顯示的那樣,調(diào)用該過(guò)程有兩種方式,差異就在于是指定現(xiàn)有定義好的調(diào)度SCHEDULE,還是在執(zhí)行過(guò)程時(shí)指定調(diào)度,目標(biāo)和實(shí)現(xiàn)的功能都是相同的,這里僅做示例,咱就挑個(gè)最復(fù)雜的方式吧,執(zhí)行過(guò)程時(shí)指定調(diào)度,執(zhí)行腳本如下: SQL> begin 2 dbms_scheduler.create_window(window_name => ¨my_first_wd1¨, 3 resource_plan => null, 4 start_date => sysdate, 5 repeat_interval => ¨FREQ=DAILY; INTERVAL=5¨, 6 duration => interval ¨1¨ hour); 7 end; 8 / PL/SQL procedure successfully completed.查詢當(dāng)前擁有的WINDOW,可以通過(guò)*_SCHEDULER_WINDOWS視圖(注意只有DBA和ALL,沒(méi)有USER,因?yàn)樗卸x的WINDOW都屬于SYS用戶)。除了*_SCHEDULER_WINDOWS視圖顯示當(dāng)前所有WINDOW外,還有:
2、管理Window通過(guò)前面那些SCHEDULER對(duì)象的學(xué)習(xí),相當(dāng)大家已經(jīng)了解了ORACLE SCHEDULER中對(duì)象的特點(diǎn),對(duì)于多數(shù)對(duì)象的管理,不外乎下列幾種:
SQL> exec dbms_scheduler.set_attribute(¨sys.my_first_wd1¨,¨start_date¨,sysdate+1); PL/SQL procedure successfully completed.
SQL> exec dbms_scheduler.enable(¨sys.my_first_wd1¨); PL/SQL procedure successfully completed.
SQL> exec dbms_scheduler.disable(¨sys.my_first_wd1¨); PL/SQL procedure successfully completed.
SQL> exec dbms_scheduler.drop_window(¨sys.my_first_wd1¨); PL/SQL procedure successfully completed.除此之外呢,對(duì)于WINDOW對(duì)象來(lái)說(shuō),由于其特殊作用,又有:
注意WINDOW是依賴于其調(diào)度的,因此在手動(dòng)打開(kāi)WINDOW時(shí),必須為其指定duration屬性: SQL> exec dbms_scheduler.open_window(¨sys.my_first_wd1¨,interval ¨1¨ hour);; PL/SQL procedure successfully completed.
SQL> exec dbms_scheduler.close_window(¨sys.my_first_wd1¨); PL/SQL procedure successfully completed.關(guān)閉和打開(kāi)WINDOW,都會(huì)記錄日志,大家可以通過(guò)*_SCHEDULER_WINDOW_LOG視圖中獲取這部分信息。 3、關(guān)于WINDOW GROUP除了WINDOW外,還有一個(gè)與WINDOW有關(guān)系的叫WINDOW GROUP,一個(gè)WINDOW GROUP可能包 含多個(gè)WINDOW。使用WINDOW GROUP的本意是這樣的,假如說(shuō)某個(gè)job執(zhí)行的時(shí)間比較長(zhǎng),甚至全天24小時(shí)都在執(zhí)行,對(duì)于這類job,單個(gè)WINDOW很難有效調(diào)整其資源占用,這時(shí)間呢,就可以通過(guò)設(shè)置一個(gè)WINDOW GROUP,該WINDOW GROUP中包含了多個(gè)WINDOW,每個(gè)WINDOW分別負(fù)責(zé)不同時(shí)間點(diǎn)時(shí)的資源使用計(jì)劃。 然后在創(chuàng)建JOB時(shí),指定schedule_name參數(shù)為WINDOW GROUP的名稱(想不到SCHEDULE_NAME還能指定為WINDOW GROUP哪,其實(shí)何止WINDOW GROUP,還可以直接指定成WINDOW哪),這樣,就可以通過(guò)很簡(jiǎn)單的方式,將job與window聯(lián)系在一起了。 WINDOW GROUP 的創(chuàng)建和管理與前面介紹的方式極其相似:
這些過(guò)程的調(diào)用方式也都非常簡(jiǎn)單,這里就不著重演示了,感興趣的朋友不妨自行嘗試。 |