天天看點

SCHEDULE(排程程式)

1、排程程式體系結構

資料字典包含一個作為所有排程程式作業的存儲點的表。可以通過DBA_SCHEDULER_JOBS視圖查詢此表。作業隊列協調器背景程序CJQ0           

監視此表,根據需要啟動作業隊列程序Jnnn來運作作業。如果在任何定義的、活動的排程程式作業,就自動啟動CJBQ0程序。根據需要啟

動Jnnn程序,但是最大數量受JOB_QUEUE_PROCESSES執行個體參數限制,該參數可以是0-1000(預設值)的任何值。如果将值設為0,那麼将不會

運作調程。

作業隊列協調器從作業隊清單中選取作業,将它們傳遞給作業隊列程序執行。它還根據需要啟動和終止作業隊列程序。要檢視目前正在           

運作的程序,可查詢V$PROCESS視圖。

select program from v$process where program like '%J%';

定義為過程的作業在資料庫中運作。作業也可以定義為作業系統指令或shell腳本:這些将作為外部作業系統任務運作。作業的觸發因素

可以是時間或事件。基于時間的作業根據時間表可能運作一次或重複運作。基本事件的作業在特定條件出現時運作。有一些預配置的事件,

也可以使用使用者定義的事件。作業可以連接配接成鍊,根據作業成功與否對分支使用簡單規則。

排程程度的一項進階功能是将期與Resource Manager相關聯。某些作業可能需要優先運作,為此,可以連結作業與Resource Manager           

使用都組,以便達到這個目的。還可以使用排程程式激活Resource Manager計劃,而不需要通過更改RESOURCE_MANAGER_PLAN執行個體參數或使

用DBMS_RESOURCE_MANAGER.SWITCH_PLAN過程調用手動激活計劃。

可以使用一個API-DBMS_SCHEDULER包來配置排程程式,通過一組資料字典視圖監視它,或是用Database Control管理它。

2、排程程式對象

排程程式對象中最基本的對象是作業。作業可以是完全自包含的:它可以定義要執行的動作和執行時間。在更進階的配置中,作業隻是

由大量各種類型的排程程式對象組成的結構的一部分。

2.1 作業

作業(job)指定了要執行的動作以及執行動作的時間。
“ 要執行的動作”可以是匿名的PL/SQL塊(可能由單條SQL語句構成)、PL/SQL存儲過程(可調用JAVA存儲過程或外部過程)、           

或在伺服器的檔案系統中存儲任何可執行檔案(既可以是二進制可執行檔案,也可以是SHELL腳本)。特别強大的功能(超出OCP

課程的範圍)是遠端外部作業,該作業在一台單獨的機器上運作。

“執行動作的時間”指定了啟動作業時的時間戳以及用于今後運作的重複時間間隔,或是觸發事件。
   DBMS_SCHEDULER.CREATE_JOB

           

2.2 程式

程式(program)在作業與其将要執行的動作之間提供了一個抽象層。程式是使用DBMS_SCHEDULER.CREATE_PROGRAM過程建立的。

通過從作業定義中取出作業内容并在程式中加以定義,就可以在不同的作業中引用相同的程式,進而不必進行多次定義就可以将

它與不同的時間表和作業類關聯在一起。需要記住的是:就是作業而言,隻有啟用程式才能使用它。預設是不啟用。

2.3 時間表

時間表(schedule)是指定作業運作時間與頻率的規範。時間表的基本原理是從作業中取出執行作業的時間,然後将其與不同的的

作業關聯。是時間表是使用DBMS_SCHEDULER.CREATE_SHEDULE

2.4 作業類

作業類用于将一個或多個作業與一個Resource Manager使用者組關聯在一起,并且也可以用于失控制日志記錄級别。

DBMS_SCHEDULER.CREATE_JOB_CLASS

2.5 視窗

時間表準确地指定了作業應當啟動的時間。通過使用Oracle能夠更自由地決定啟動作業的時間,視窗(window)進一步擴充了

時間表的概念。一個視窗在特定時間打開,并且在持續一定的時間之後關閉:指定在某個視窗中運作的作業可以根據Oracle的判斷

在該視窗期間的任何時刻啟動。視窗本身可以根據時間表重複打開。結合類與Resource Manager時使用視窗具有特殊的意義:Oracle

能夠根據相對優先權在視窗内排程作業來運作。此外視窗也可以激活Resource Manager計劃。

DBMS_SCHEDULER.CREATE_WINDOW

從什麼時間點開始,續繼多久時間,能過Resource Plan限制資源使用。