国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

ORACLE 10g調度例行任務解放DBA時間(組圖)

2024-08-29 13:37:14
字體:
來源:轉載
供稿:網友

  例行任務是單調和令人厭煩的。假如你以手動方式執(zhí)行這些例行任務,則你不得不緊張地一次又一次地重復執(zhí)行相同的任務,⑶一勾嬖諞恢址縵眨褪悄騁惶炷憧贍芑岷雎浴⒋砉湟桓霾街瑁蛘叻鈣淥砦蟆racle數據庫10g新的內置任務調度程序為你提供了調度例行任務的強大功能。 利用這一調度程序,你可以規(guī)定要完成的工作、指定什么時候完成該工作,并監(jiān)測該工作的完成情況,以便能糾正任何問題。你甚至可以控制分配給您所調度的任務的數據庫資源和優(yōu)先級,以確保首先完成最重要的工作,而不會對其它系統(tǒng)的活動產生不可反抗的影響。
  
  體系結構
  
  你可以通過 DBMS_SCHEDULER 包或者通過Oracle企業(yè)治理器10g的數據庫控制功能來訪問這一新的調度程序。圖1給出了與任務的創(chuàng)建和執(zhí)行具有最直接關系的調度程序組件。一項任務將一個程序和一個調度表結合在一起。該程序定義將要運行的內容。例如,一個程序可以是一個 PL/SQL 塊、一個存儲過程,或者一個操作系統(tǒng)腳本。而調度表則定義什么時候運行該程序。對于一個一次性任務,調度表中僅包含一個起始時間。對于一個重復性任務,你可以指定一個起始時間,一個重復運行調度表,還可以根據需要指定結束時間。每次運行一項任務都被看作是一個任務實例。在開始使用該程序調度程序時必須把握的三個核心組件就是任務、調度表和程序。
  
  如圖1所示,任務類將調度系統(tǒng)與資源治理系統(tǒng)連接起來,使你可以控制如何將數據庫資源分配給正在運行的任務。利用任務類將一個任務下達到資源使用者組,該組是一個共享 CPU 時間、并行操作和其它資源分配的會話期組。然后,你可以利用資源計劃來控制將這些資源分配給這個使用者組或其它使用者組。圖2 顯示出調度程序窗口如何控制不同資源計劃在何時被激活。圖2 還顯示一個窗口組,它將類似的窗口組合成一個單一的實體。窗口和窗口組使你可以在很好地控制如何將數據庫資源分配給不同的任務類。
  
 ORACLE 10g調度例行任務解放DBA時間(組圖)(圖一)
  圖1:調度程序核心組件
   ORACLE 10g調度例行任務解放DBA時間(組圖)(圖二)
  圖2:調度程序資源治理

  
  開始
  
  要創(chuàng)建并運行任務,你需要至少具有CREATE JOB 系統(tǒng)權限。假如你是一位 DBA,那么你將通過授予DBA 角色的SCHEDULER_ADMIN角色而具有 CREATE JOB權限和所有其它調度程序權限。你可以將 CREATE JOB 權限授予數據庫用戶,答應他們在其自己的模式中創(chuàng)建和運行他們自己的任務。例如,下面的語句將 CREATE JOB 授予用戶 gennick:
  
  GRANT CREATE JOB TO gennick;
  
  與你應用DBMS_JOB時的情況不同,你不需要設置一個初始化參數,以啟動一個任務協調程序后臺進程。假如你使用該新的調度程序創(chuàng)建任務,則你的實例會在需要時自動啟動一個任務協調程序后臺進程。
  
  假如你計劃使用資源計劃和使用者組來控制數據庫資源的分配,則將你實例的RESOURCE_LIMIT 參數設置為TRUE。可以通過 ALTER SYSTEM完成該項設置,如下所示:
  
  ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;
  
  最后,假如您將CREATE JOB 權限授予了一個非DBA用戶,而且你希望該用戶能夠使用數據庫控制的圖形用戶界面來調度任務,那么你還需要授予該用戶 SELECT ANY DICTIONARY 系統(tǒng)權限。
  
  你還可以使用 DBMS_SCHEDULER 包。通過SQL*Plus 調用DBMS_SCHEDULER使你完全可以通過命令行訪問該調度程序。DBMS_SCHEDULER 還提供了將調度程序功能內嵌于用戶應用程序中的能力。
  
  創(chuàng)建你的第一個任務
  
  要創(chuàng)建一個重復性任務,你首先需要定義程序和調度表。假定你需要在每隔一天的下午6:00加載一個外部表。首先創(chuàng)建一個調度程序,它提供一個 PL/SQL 塊以執(zhí)行該加載。代碼清單1中的PL/SQL 塊發(fā)出一個對DBMS_SCHEDULER.CREATE_PROGRAM的調用,作為程序操作所提供的 PL/SQL 塊包含有一個簡單的INSERT...SELECT FROM 語句,用于從該外部表中載入新的客戶。
  
  接著,創(chuàng)建一個調度表,根據該調度表運行該程序。代碼清單2 給出一個對DBMS_SCHEDULER.CREATE_SCHEDULE的調用,用于創(chuàng)建我的 PERIODICLOADS調度表。注釋和調度表名稱參數相當簡單。注釋可以是提醒你為什么要創(chuàng)建該調度表的任意文本。schedule_ name 參數指明該調度表的所有者和名稱。與程序和任務相類似,調度程序也是模式對象,它們的名稱必須符合與表、索引等相同的命名規(guī)則。
  
  start_date為一個TIMESTAMP WITH TIME ZONE 值,它指明該調度表什么時候被激活。此調度表在(美國東部時間)2004年3月22日星期一開始時被激活。
  
  此調度程序引入了一個功能強大的日歷語法,你可以用此語法調度重復性任務。此語法具有三個組件: 頻度、間隔和時刻。
你還有一個選項:基于一個PL/SQL表達式定義重復間隔(假如你對一個任務定義了一個內嵌調度程序),但是我相信你可能找到一種日歷語法,它能滿足除最不常用的調度表以外的所有調度表的需要。以下語句是我的PERIODICLOADS 調度表中repeat_interval參數中的日歷語法:
  
  FREQ=DAILY;INTERVAL=2;BYHOUR=18;
  BYMINUTE=0;BYSECOND=0
  
  FREQ=DAILY 根據PERIODICLOADS 調度表規(guī)定,任何任務相繼運行之間的重復時間間隔以天或者24小時為單位計算。INTERVAL=2 指明單位的數目,在此例中為2天。三個 BY 數值-BYHOUR=18, BYMINUTE=0, and BYSECOND=0-指明任務運行的時刻,以24小時制表示。代碼清單2中的PERIODICLOADS 調度表將給出以下任務運行時間:
  
  第一次運行是在2004年3月22日星期一,下午6:00。
  第二次運行是在2004年3月22日星期一的兩天之后,即3月24日星期三的下午6:00。
  第三次運行是在2004年3月22日星期一的兩天之后再過兩天,即3月26日星期五下午6:00。
  
  該日歷語法的一個非常好的特色就是它消除了使用DBMS_JOB時可能會發(fā)生的調度表時間偏移。一個任務實例的起始時間不會影響下一個任務實例的起始時間。相反,調度表的重復時間間隔總是根據調度表的start_date重新進行計算。
  
  該日歷算法的通用性很好。 你不僅可以為每個 BY 要害字指定一個單一取值,而且還可以指定一個取值列表。例如,假如你希望總在星期一、星期三和星期五進行周期性加載,那么你可以指定重復時間間隔如下:
  
  FREQ=WEEKLY;INTERVAL=1;
  BYDAY=MON,WED,FRI;BYHOUR=18;BYMINUTE=0;
  BYSECOND=0
  
  此調度表將每周重復一次 (INTERVAL=1);它將在每周的星期一、星期三和星期五啟動任務 (BYDAY=MON,WED,FRI);并且這些任務將在這些天的每個下午6:00 p.m (BYHOUR=18; BYMINUTE=0;BYSECOND=0) 運行。
  
  在你已經定義了程序和調度表之后,下一個步驟就是將這兩個對象以一個任務的形式連接在一起。代碼清單3顯示一個對DBMS_SCHEDULER.CREATE_JOB的調用,它創(chuàng)建一個名為 LOADNEWCUSTOMERS的任務。此任務將根據PERIODICLOADS調度表運行LOADCUSTOMERS程序。
  
  將調度表、程序和任務分離可以實際減少你的工作量。你可以在任何時間基于PERIODICLOADS調度表創(chuàng)建一個新的任務,而且此新任務將在與剛創(chuàng)建的LOADNEWCUSTOMERS任務相同的時刻和以相同的時間間隔運行。
  
  代碼清單2 中定義的調度表給出以下任務開始運行的時間:
  
  2004年3月22日星期一,下午6:00。
  2004年3月24日星期三,下午6:00。
  2004年3月26日星期五,下午6:00。
  
  當你將一個任務連接到此調度表時,該任務將在你將兩者連接在一起的日期和時間之后的下一個調度時間運行。例如,假如你在2004年3月23日星期二創(chuàng)建一個如代碼清單3 所示的任務,此任務將在3月24日星期三的下午6:00第一次運行。假如你擁有按照同一調度表運行的幾個相關任務,并且你需要修改該調度表,那么對整個相關任務集只需修改一次。
  
  限定任務的起始時間
  
  這一新的調度程序的一個非常好的特性是能夠將一個任務的啟始時間限定在正常啟動時間之后的一個特定時期。例如,假定你有一個安排在天天晚上6:00運行的任務。由于系統(tǒng)加載或其它原因,此任務實際上可能要等到6:12才能有開始運行的機會。即使是延遲了12分鐘,你是否仍然希望開始運行該任務?
  
  采用這一調度程序,你可以回答希望在延后多長時間后你仍然愿意開始運行一個任務的問題。你可以通過設置該任務的schedule_limit屬性值(以分為單位)來完成這一工作。以下語句指明我的LOADNEWCUSTOMERS任務必須在其預定開始運行的時間之后的10分鐘內開始運行:
  
  sys.dbms_scheduler.set_attribute(
  name =>'GENNICK.LOADNEWCUSTOMERS',
  attribute => 'schedule_limit',
  value => 10);
  
  假如這一任務被延后到超過其開始運行的時間10分鐘才能運行,則將取消(跳過)此任務的執(zhí)行。 默認的 schedule_limit屬性為空,則意味著沒有任何限制。當使用數據庫控制時,你可以利用"編輯任務"頁面的"選項"選項卡設置這一屬性。
  
  創(chuàng)建資源窗口
  
  作為一個DBA,你可以創(chuàng)建資源計劃,以將資源分配給不同的使用者組。利用調度程序窗口,你可以使這些資源計劃自動生效。代碼清單4 給出了創(chuàng)建一個夜間批處理窗口的代碼,這個窗口在每晚6:00開始運行,一直運行到第二天早晨8:00。請注重resource_plan 參數。該窗口激活BATCH_PROCESSING 資源計劃。與此類似,你可以創(chuàng)建一個第二窗口,它在天天早晨激活ONLINE_PROCESSING資源計劃。
  
  任務類答應你將任務分派給使用者組,它是資源治理與調度程序之間的連接。默認的任務類為DEFAULT_JOB_CLASS,但是在創(chuàng)建一個任務時,你可以很輕易地選擇一個不同的類。你還可以在創(chuàng)建任務之后很輕易地由一個任務切換至另一個任務。
  
  類答應你將任務分派給使用者組,它是資源治理與調度程序之間的連接。默認的任務類為DEFAULT_JOB_CLASS,但是在創(chuàng)建一個任務時,你可以很輕易地選擇一個不同的類。你還可以在創(chuàng)建任務之后很輕易地由一個任務切換至另一個任務。
  
  代碼清單4 中所創(chuàng)建的窗口其定義帶有一個內嵌調度表,這就是說該調度表是該窗口定義的一部分。還有可能將一個窗口連接到一個單獨定義的調度表。你可以更進一步將一個窗口和幾個相關的任務連接到相一個調度表,這樣,當該調度表被觸發(fā)時,該窗口的資源計劃將被激活,所有連接到該調度表的任務便開始運行。
  
  假如你有一些任務,只希望它們在窗口及其資源計劃被激活時運行,那么你可以根據窗口而不是根據預定的調度表來調度這些任務。
假如你有兩個或多個窗口共享同一個資源計劃,則你可將這些窗口結合成一個窗口組。以下語句說明了如何創(chuàng)建一個包含夜間和周末運行的窗口的批處理窗口組:
  
  BEGIN
  DBMS_SCHEDULER.CREATE_WINDOW_GROUP(
  group_name=>'batch_processing',
  window_list=>'NIGHT,WEEKEND');
  END;
  
  監(jiān)控與日志
  
  這一新的調度程序提供了卓越的監(jiān)控和日志工具,它們非凡便于通過Oracle 企業(yè)治理器 10g的數據庫控制界面來使用。圖 3 給出了你可以從"調度程序任務"頁看到的已排定的任務列表。點擊"運行"選項卡可以查看當前運行的任務。點擊"運行歷史"選項卡,你會看到類似于圖 4中的一個日志。 每個日志條目表示一個任務實例,你可以立即看到哪個實例運行成功了,哪個實例運行失敗了。點擊一個任務名稱可以深入到一任務,你還可以進一步深入查看每次運行的具體日志條目。 日志條目將被保存你所指定的一段時間。你可以為日志條目指定一個全局保持時間,你也可以為不同的工作類定制日志條目的保持時間。調度程序將天天檢查一次已經超過其保持時間的日志條目,并將它們刪除。
  
 ORACLE 10g調度例行任務解放DBA時間(組圖)(圖三)
點擊查看大圖

  圖3: 調度程序的已排定任務選項卡
   ORACLE 10g調度例行任務解放DBA時間(組圖)(圖四)
點擊查看大圖

  圖4: 調度程序的任務運行歷史選項卡

  
  對于任何希望減少調度、治理和監(jiān)控重復性任務的單調乏味程度的DBA來說,這一新的調度程序及其在數據庫控制中的強力支持都是深受歡迎的技術成就。程序、調度表、任務、任務類、窗口和窗口組的體系結構是一個功能強大的特性集,并且為在未來版本中進一步提高打下了基礎。相對于編寫PL/SQL表達式來計算任務執(zhí)行時間間隔的老DBMS_JOB方法,日歷語法的使用更簡單、更可靠。這一新的調度程序可以提供很多功能。請很好地利用它吧。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 永兴县| 阜南县| 益阳市| 耒阳市| 潍坊市| 河池市| 岢岚县| 织金县| 延寿县| 新田县| 商丘市| 麟游县| 措美县| 丹寨县| 新闻| 滦南县| 渝中区| 灵台县| 红安县| 曲阜市| 科技| 揭阳市| 涿州市| 桐庐县| 仁怀市| 金秀| 太和县| 南阳市| 和林格尔县| 时尚| 巴楚县| 苍溪县| 通许县| 台东县| 工布江达县| 阜新市| 蒙山县| 佛冈县| 滨州市| 佛冈县| 古田县|