全面學習ORACLE Scheduler特性(12)使用Windows和Window Groups
七、使用Windows
此Windows非彼Windows,通常說的Windows是指蓋首富的作業系統,而此處所說的Windows,是指SCHEDULER特性中的一個子項。在SCHEDULER中,WINDOW對應的是一個時間視窗的概念。
我們知道普通的jobs是沒有執行時間管理地概念的,就是說一個job啟動之後,使用者只能被動地等待其執行,一直到其執行地任務完成(或DBA手動kill對應程式),在此期間,執行的job將與其它活動的程式共同競爭當前系統中的資源。對於大型資料庫系統,系統資源那可是相當寶貴的無形資產哪,企能誰說用就用、想什麼時候用就什麼時候用,沒點兒計劃沒點兒節制這還了得。你還別說,在9i之前,還真就是這麼回事兒,誰想用就用,誰也管不了,其中表示最甚的就是job。你是否想起了Job Classes,沒錯定義Job Classes確實可以控制job能夠使用的資源,不過單單使用Job Classes並不能靈活的控制job在合適的時間使用適當的資源。進入10g之後,SCHEDULER中提供了WINDOW,事情終於有了緩解。
WINDOW 可以指定一個時間視窗,在此期間,透過與Job Classes的搭配組合,能夠有效控制job執行時支配(使用)的資源。比如說job通常是在凌晨伺服器負載較低時執行,那麼就可以透過WINDOW設定在此期間,允許jobs使用更多的系統資源,而到了工作時間後,如果job仍未執行完成,為其分配另一個有限的資源,以儘可能降低job執行佔用的資源對其它業務的影響。
1、建立Window
建立Window有一個專門的過程:DBMS_SCHEDULER.CREATE_WINDOW進行處理,該過程有兩種呼叫方式,如下:
-- 基於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);
-- 基於定義的排程
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);刨開那些看著眼熟的,已經認識的,看引數名就知道其所代表含義的之外,下列幾個引數可能需要關注:
- Resource_plan :這一引數用來指定要使用的資源使用計劃,當開啟WINDOW時,就會自動按照指定的資源使用計劃中的設定分配資源,當WINDOW關閉時(沒錯,window是會關閉的,要不怎麼說有效控制資源的使用情況泥),系統會自動切換回適當資源計劃。這個引數在執行過程時甚至可以指定為NULL或空值¨¨,當設定為NULL時,就表示使用預設的資源計劃,當設定為空值¨¨時,表示禁用資源使用計劃。
- Duration :指定WINDOW的有效期,比如說指定為interval ¨5¨ hour就表示5個小時,該引數在執行過程時必須指定引數值,否則建立會報錯。
- Window_priority :該引數用來指定WINDOW的優先順序。因為在相同時間只有一個WINDOW有效,因此如果在建立WINDOW時發現重疊的情況,ORACLE就需要根據這一引數指定的規則,來確定優先順序,說白了就是先把資源給誰用,這一引數有兩個可選值:HIGH或LOW,預設值為LOW。
正如前面CREATE_WINDOW過程語法結構顯示的那樣,呼叫該過程有兩種方式,差異就在於是指定現有定義好的排程SCHEDULE,還是在執行過程時指定排程,目標和實現的功能都是相同的,這裡僅做示例,我們就挑個最複雜的方式吧,執行過程時指定排程,執行指令碼如下:
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.查詢當前擁有的WINDOW,可以透過*_SCHEDULER_WINDOWS檢視(注意只有DBA和ALL,沒有USER,因為所有定義的WINDOW都屬於SYS使用者)。除了*_SCHEDULER_WINDOWS檢視顯示當前所有WINDOW外,還有:
- *_SCHEDULER_WINDOW_DETAILS 檢視:顯示WINDOW的詳細資訊;
- *_SCHEDULER_WINDOW_LOG 檢視:顯示WINDOW的日誌,比如開啟和關閉;
2、管理Window
透過前面那些SCHEDULER物件的學習,相當大家已經瞭解了ORACLE SCHEDULER中物件的特點,對於多數物件的管理,不外乎下列幾種:
- 修改物件屬性,使用SET_ATTRIBUTE過程;
SQL> exec dbms_scheduler.set_attribute(¨sys.my_first_wd1¨,¨start_date¨,sysdate+1);
PL/SQL procedure successfully completed.- ENABLE 物件,使用ENABLE過程;
SQL> exec dbms_scheduler.enable(¨sys.my_first_wd1¨);
PL/SQL procedure successfully completed.- DISABLE 物件,使用DISABLE過程;
SQL> exec dbms_scheduler.disable(¨sys.my_first_wd1¨);
PL/SQL procedure successfully completed.- 刪除物件,使用DROP_WINDOW過程;
SQL> exec dbms_scheduler.drop_window(¨sys.my_first_wd1¨);
PL/SQL procedure successfully completed.除此之外呢,對於WINDOW物件來說,由於其特殊作用,又有:
- 手動開啟WINDOW,使用OPEN_WINDOW過程;
注意WINDOW是依賴於其排程的,因此在手動開啟WINDOW時,必須為其指定duration屬性:
SQL> exec dbms_scheduler.open_window(¨sys.my_first_wd1¨,interval ¨1¨ hour);;
PL/SQL procedure successfully completed.- 手動關閉WINDOW,使用CLOSE_WINDOW過程;
SQL> exec dbms_scheduler.close_window(¨sys.my_first_wd1¨);
PL/SQL procedure successfully completed.關閉和開啟WINDOW,都會記錄日誌,大家可以透過*_SCHEDULER_WINDOW_LOG檢視中獲取這部分資訊。
3、關於WINDOW GROUP
除了WINDOW外,還有一個與WINDOW有關係的叫WINDOW GROUP,一個WINDOW GROUP可能包 含多個WINDOW。使用WINDOW GROUP的本意是這樣的,假如說某個job執行的時間比較長,甚至全天24小時都在執行,對於這類job,單個WINDOW很難有效調整其資源佔用,這時間呢,就可以透過設定一個WINDOW GROUP,該WINDOW GROUP中包含了多個WINDOW,每個WINDOW分別負責不同時間點時的資源使用計劃。
然後在建立JOB時,指定schedule_name引數為WINDOW GROUP的名稱(想不到SCHEDULE_NAME還能指定為WINDOW GROUP哪,其實何止WINDOW GROUP,還可以直接指定成WINDOW哪),這樣,就可以透過很簡單的方式,將job與window聯絡在一起了。
WINDOW GROUP 的建立和管理與前面介紹的方式極其相似:
- 建立,使用CREATE_WINDOW_GROUP過程;
- 刪除,使用DROP_WINDOW_GROUP過程;
- 新增WINDOW成員,使用ADD_WINDOW_GROUP_MEMBER過程;
- 刪除WINDOW成員,使用REMOVE_WINDOW_GROUP_MEMBER過程;
- 啟用,使用ENABLE過程;
- 禁用,使用DISABLE過程;
這些過程的呼叫方式也都非常簡單,不多說了,我忒忙,感興趣的朋友不妨自行嘗試。
全文完,打包下載請到:
==============================================
全面學習ORACLE Scheduler特性(11)使用Job Classes
全面學習ORACLE Scheduler特性(10)管理Chains
全面學習ORACLE Scheduler特性(9)建立Chains
全面學習ORACLE Scheduler特性(8)Application丟擲的Events
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-1135964/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 全面學習ORACLE Scheduler特性(3)使用ProgramsOracle
- 全面學習ORACLE Scheduler特性(11)使用Job ClassesOracle
- 全面學習ORACLE Scheduler特性(4)建立和管理ScheduleOracle
- 全面學習ORACLE Scheduler特性(1)建立jobsOracle
- 全面學習ORACLE Scheduler特性(2)管理jobsOracle
- 全面學習ORACLE Scheduler特性(7)Scheduler丟擲的EventsOracle
- 全面學習ORACLE Scheduler特性(7)使用Events之Scheduler丟擲的EventsOracle
- 全面學習ORACLE Scheduler特性(9)建立ChainsOracleAI
- 全面學習ORACLE Scheduler特性(10)管理ChainsOracleAI
- 全面學習ORACLE Scheduler特性(8)使用Events之Application丟擲的EventsOracleAPP
- 全面學習ORACLE Scheduler特性(6)設定Repeat Interval引數Oracle
- 全面學習ORACLE Scheduler特性(8)Application丟擲的EventsOracleAPP
- 全面學習ORACLE Scheduler特性(5) Schedules排程Programs執行的JobsOracle
- 全面學習ORACLE Scheduler特性(5)Schedules排程Programs執行的JobsOracle
- 全面學習和應用ORACLE ASM特性OracleASM
- 【JOB】Oracle JOB全面學習(DBMS_JOB和DBMS_SCHEDULER)Oracle
- [轉載] 全面學習和應用ORACLE ASM特性(4),(5)OracleASM
- 全面學習和應用ORACLE ASM特性--(2)管理asm磁碟OracleASM
- [轉載] 全面學習和應用ORACLE ASM特性(1),(2),(3)OracleASM
- 全面學習和應用ORACLE ASM特性--(3)新增和修改asm磁碟組OracleASM
- 全面學習oracle flashback特性(3.2)--Flashback Database操作示例OracleDatabase
- 全面學習oracle flashback特性(2.1)--Flashback Table之RECYCLEBINOracle
- 全面學習和應用ORACLE ASM特性--(1)關於asm例項OracleASM
- Oracle Scheduler學習筆記分享Oracle筆記
- Oracle 10g Scheduler 特性Oracle 10g
- 全面學習和應用ORACLE ASM特性--(5)管理asm磁碟中的檔案OracleASM
- 全面學習oracle flashback特性(2.3)--Flashback Table之注意事項Oracle
- 全面學習oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- Oracle 10g Scheduler 全面介紹Oracle 10g
- Oracle 12C Statistics on Column GroupsOracle
- 全面學習和應用ORACLE ASM特性--(4)管理asm磁碟組中目錄和檔案OracleASM
- 全面學習oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- 全面學習oracle flashback特性(1.1)--閃回查詢之As of timestampOracle
- 【徵文】全面學習oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- 全面學習oracle flashback特性(2.2)--Flashback Table之從UNDO中恢復Oracle
- 全面學習oracle flashback特性(1.5)--閃回查詢之制約因素Oracle
- 【徵文】全面學習oracle flashback特性(1.1)--閃回查詢之As of timestampOracle
- 【徵文】全面學習oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle