溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Oracle調(diào)度Schedule特性(第八部分)-Windows和Window Groups

發(fā)布時(shí)間:2020-08-11 10:32:49 來源:ITPUB博客 閱讀:200 作者:edge_dba 欄目:關(guān)系型數(shù)據(jù)庫
哈哈,關(guān)于schedule的內(nèi)容還沒完,本章講Windows,通常說的Windows是指蓋首富的操作系統(tǒng),而此處所說的Windows,
是指SCHEDULER特性中的一個(gè)子項(xiàng)。在SCHEDULER中,WINDOW對應(yīng)的是一個(gè)時(shí)間窗口的概念。
我們知道普通的jobs是沒有運(yùn)行時(shí)間管理地概念的,就是說一個(gè)job啟動之后,用戶只能被動地等待其執(zhí)行,一直到其執(zhí)行地任務(wù)完成(或DBA手動kill對應(yīng)進(jìn)程),
在此期間,執(zhí)行的job將與其它活動的進(jìn)程共同競爭當(dāng)前系統(tǒng)中的資源。對于大型數(shù)據(jù)庫系統(tǒng),系統(tǒng)資源那可是相當(dāng)寶貴的無形資產(chǎn)哪,
企能誰說用就用、想什么時(shí)候用就什么時(shí)候用,沒點(diǎn)兒計(jì)劃沒點(diǎn)兒節(jié)制這還了得。你還別說,在9i之前,還真就是這么回事兒,誰想用就用,誰也管不了,
其中表示最甚的就是job。你是否想起了Job Classes,沒錯(cuò)定義Job Classes確實(shí)可以控制job能夠使用的資源,不過單單使用Job Classes并不能靈活的控制job在合適的時(shí)間使用適當(dāng)?shù)馁Y源。
oracle 10g之后,SCHEDULER中提供了WINDOWS,事情終于得到了解決。

WINDOW 可以指定一個(gè)時(shí)間窗口,在此期間,通過與Job Classes的搭配組合,能夠有效控制job執(zhí)行時(shí)支配(使用)的資源。
比如說job通常是在凌晨服務(wù)器負(fù)載較低時(shí)執(zhí)行,那么就可以通過WINDOW設(shè)置在此期間,允許jobs使用更多的系統(tǒng)資源,而到了工作時(shí)間后,
如果job仍未執(zhí)行完成,為其分配另一個(gè)有限的資源,以盡可能降低job執(zhí)行占用的資源對其它業(yè)務(wù)的影響。

1、創(chuàng)建Window
創(chuàng)建Window有一個(gè)專門的過程:DBMS_SCHEDULER.CREATE_WINDOW進(jìn)行處理,該過程有兩種調(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);
除去那些之前已經(jīng)介紹的,已經(jīng)認(rèn)識的,看參數(shù)名就知道其所代表含義的之外,下列幾個(gè)參數(shù)需要重點(diǎn)關(guān)注
Resource_plan    這一參數(shù)用來指定要使用的資源使用計(jì)劃,當(dāng)打開WINDOW時(shí),就會自動按照指定的資源使用計(jì)劃中的設(shè)置分配資源,
                 當(dāng)WINDOW關(guān)閉時(shí)(沒錯(cuò),window是會關(guān)閉的,要不怎么說有效控制資源的使用情況泥),系統(tǒng)會自動切換回適當(dāng)資源計(jì)劃。
                 這個(gè)參數(shù)在執(zhí)行過程時(shí)甚至可以指定為NULL或空值"",當(dāng)設(shè)置為NULL時(shí),就表示使用默認(rèn)的資源計(jì)劃,當(dāng)設(shè)置為空值""時(shí),表示禁用資源使用計(jì)劃。
Duration         指定WINDOW的有效期,比如說指定為interval "5" hour就表示5個(gè)小時(shí),該參數(shù)在執(zhí)行過程時(shí)必須指定參數(shù)值,否則創(chuàng)建會報(bào)錯(cuò)。
Window_priority  該參數(shù)用來指定WINDOW的優(yōu)先級。因?yàn)樵谙嗤瑫r(shí)間只有一個(gè)WINDOW有效,因此如果在創(chuàng)建WINDOW時(shí)發(fā)現(xiàn)重疊的情況,ORACLE就需要根據(jù)這一參數(shù)指定的規(guī)則,
                 來確定優(yōu)先級,說白了就是先把資源給誰用,這一參數(shù)有兩個(gè)可選值:HIGH或LOW,默認(rèn)值為LOW。

正如前面CREATE_WINDOW過程語法結(jié)構(gòu)顯示的那樣,調(diào)用該過程也有兩種方式,差異就在于是指定現(xiàn)有定義好的調(diào)度SCHEDULE,還是在執(zhí)行過程時(shí)指定調(diào)度,
目標(biāo)和實(shí)現(xiàn)的功能都是相同的,這里僅做示例,我們挑個(gè)最復(fù)雜的方式吧,執(zhí)行過程時(shí)指定調(diào)度,執(zhí)行腳本如下
begin
  dbms_scheduler.create_window(window_name     => 'mywindow1',
                               resource_plan   => null,
                               start_date      => sysdate,
                               repeat_interval => 'FREQ=DAILY; INTERVAL=5',
                               duration        => interval '1' hour);
end;
查詢當(dāng)前擁有的WINDOW,可以通過*_SCHEDULER_WINDOWS視圖(注意只有DBA和ALL,沒有USER,因?yàn)樗卸x的WINDOW都屬于SYS用戶)。
除了*_SCHEDULER_WINDOWS視圖顯示當(dāng)前所有WINDOW外,還有*_SCHEDULER_WINDOW_DETAILS 視圖,顯示W(wǎng)INDOW的詳細(xì)信息。
*_SCHEDULER_WINDOW_LOG 視圖,顯示W(wǎng)INDOW的日志,比如打開和關(guān)閉。

select window_name,resource_plan,to_char(start_date,'yyyy-mm-dd hh34:mi:ss') ,repeat_interval from DBA_SCHEDULER_WINDOWS where window_name = 'MYWINDOW1';
WINDOW_NAME     RESOURCE_PLAN                  TO_CHAR(START_DATE,'YYYY-MM-DDHH24:MI:SS')                                  REPEAT_INTERVAL
--------------- ------------------------------ --------------------------------------------------------------------------- -------------------------
MYWINDOW1                                      2018-05-15 15:12:02                                                         FREQ=DAILY; INTERVAL=5

2、管理Window
通過前面那些SCHEDULER對象的學(xué)習(xí),相當(dāng)大家已經(jīng)了解了ORACLE SCHEDULER中對象的特點(diǎn),對于多數(shù)對象的管理,基本都是下面這幾種
(1)修改對象屬性,使用SET_ATTRIBUTE過程;
begin
dbms_scheduler.set_attribute("mywindow1","start_date",sysdate+1);
end;
(2)ENABLE 對象,使用ENABLE過程;
begin
dbms_scheduler.enable("mywindow1");
end;
(3)DISABLE 對象,使用DISABLE過程;
begin
dbms_scheduler.disable("mywindow1");
end;
(4)刪除對象,使用DROP_WINDOW過程;
begin
dbms_scheduler.drop_window("mywindow1");
end;
(5)除此之外呢,對于WINDOW對象來說,由于其特殊作用,又有手動打開WINDOW,使用OPEN_WINDOW過程。
  注意WINDOW是依賴于其調(diào)度的,因此在手動打開WINDOW時(shí),必須為其指定duration屬性
begin
dbms_scheduler.open_window("mywindow1",interval "1" hour);
end;
(6)手動關(guān)閉WINDOW,使用CLOSE_WINDOW過程
begin
dbms_scheduler.close_window("mywindow1");
end;
關(guān)閉和打開WINDOW,都會記錄日志,大家可以通過*_SCHEDULER_WINDOW_LOG視圖中獲取這部分信息。

3、WINDOW GROUP
除了WINDOW外,還有一個(gè)與WINDOW有關(guān)系的叫WINDOW GROUP,一個(gè)WINDOW GROUP可能包含多個(gè)WINDOW。使用WINDOW GROUP的本意是這樣的,
假如說某個(gè)job執(zhí)行的時(shí)間比較長,甚至全天24小時(shí)都在執(zhí)行,對于這類job,單個(gè)WINDOW很難有效調(diào)整其資源占用,這時(shí)間呢,
就可以通過設(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哪),這樣,就可以通過很簡單的方式,將job與window聯(lián)系在一起了。

WINDOW GROUP 的創(chuàng)建和管理與前面介紹的方式極其相似
創(chuàng)建,使用CREATE_WINDOW_GROUP過程
刪除,使用DROP_WINDOW_GROUP過程
添加WINDOW成員,使用ADD_WINDOW_GROUP_MEMBER過程
刪除WINDOW成員,使用REMOVE_WINDOW_GROUP_MEMBER過程
啟用,使用ENABLE過程
禁用,使用DISABLE過程
這些過程的調(diào)用方式也都非常簡單,大家可以私底下做做實(shí)驗(yàn)。
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI