oracle job queue/oracle 作业队列

一、作業的概念
    作業是一組PL/SQL代碼,用於完成特定的功能。它由作業調度囂調度執行,可以將它比較我們日常工作中的工作安排,它在將來的某個時間點自動執行,或在每間隔一段時間後自動重復執行。
 
二、job,job queue,Jnnn, coordinator job queue(CJQ0) ,DBMS_JOB
    job queue 翻 譯成中文叫做作業隊列。作業是一組代碼PL/SQL代碼用於完成特定的功能。作業隊列,是在oracle服務囂中用於存儲作業的一種機制或者說邏輯構件。 Jnnn指的是執行特定作業的作業進程,nnn指的是作業進程號。CJQ0是作業進程調度囂,它本身也是作業進程,它的作用是用於調度作業進程Jnnn。 DBMS_JOB 是一個包,該包內的procedures用於對作業進行管理,包括:向作業隊列中添加作業,從作業隊列中刪除作業,立即執行作業隊列中的作業,修改作業隊列中作業的描述,修改作業隊列中作業的時間調度等等。
 
三、調度原理
    用戶通過調用DBMS_JOB包中的procedures向作業隊列中增加隊列,並設定作業的調度執行時間或周期。 CJQ0 進程始終監視檢查作業隊列中是否有作業到了調度時間點,若發現,則指派個一個作業執行進程Jnnn來執行該作業。
 
四、啟動數據庫的作業調度功能
    通作設定初始化參數 JOB_QUEUE_PROCESSES 來啟動作業調度功能。
    如果將 JOB_QUEUE_PROCESSES 設為0,則關閉作業調度功能,這樣的話,作業隊列中的作業將不會自動執行。當 JOB_QUEUE_PROCESSES 的值大於0時,啟動作業調度功能。 JOB_QUEUE_PROCESSES 指的是作業進程的個數量,如:
JOB_QUEUE_PROCESSES = 30
表示啟動30個作業進程。
JOB_QUEUE_PROCESSES 是一個動態參數,可以通過alter system命令在運行時修改。如:
alter system set JOB_QUEUE_PROCESSES = 20
若新的值小於原值,而且空間作業進程數小於兩者之差,則空間作業進程會被終止,但不會立即終止執行中的作業進程,而是會等到執行完畢後再將其終止。
 
五、管理作業隊列
1. 以下是DBMS_JOB包內的過程說明(注:DBMS_JOB包的詳細說明,請參考oracle官方文檔<> ):
procedure    說明
----------------------------------
SUBMIT       用於向作業隊列中添加作業
REMOVE       用於將作業從作業隊列中移除
CHANGE       用於修改隊列中指定作業的描述以及調度時間或周期
WHAT         用於設置隊列中指定作業的作業代碼
NEXT_DATE    修改隊列中指定作業的下次執行時間
INTERVAL     修改隊列中指定作業的執行周期間隔
BROKEN       設置隊列中指定作業是否為"BROKEN",若作業在"BROKEN"狀態,則它將不被執行
RUN          立即執行隊列中的指定作業
----------------------------------
 
2. 舉例
向作業隊列中提交作業
VARIABLE jobno NUMBER
BEGIN
DBMS_JOB.SUBMIT(:jobno,
'DBMS_DDL.ANALYZE_OBJECT(''TABLE'',
''HR'', ''EMPLOYEES'',
''ESTIMATE'', NULL, 50);',
SYSDATE, 'SYSDATE + 1');
COMMIT;
END;
/
PRINT jobno
 
JOBNO
----------
14144
上述代碼向作業隊列中提交一個作業,其作業代碼是
DBMS_DDL.ANALYZE_OBJECT(''TABLE'',
''HR'', ''EMPLOYEES'',
''ESTIMATE'', NULL, 50);
執行時間是sysdate,執行周期是每一天執行一次。
立即執行一個作業
EXECUTE DBMS_JOB.RUN(14144);
修改一個作業( 將14144號作業改成每三天執行一次)
EXECUTE DBMS_JOB.CHANGE(14144, null, null, ’sysdate+3’);
 
六、查看作業隊列的信息
可以通過以下幾個視圖來查看當前的作業隊列信息:
DBA_JOBS
ALL_JOBS
USER_JOBS
DBA_JOBS_RUNNING
視圖的詳細信息請參考<>.

你可能感兴趣的:(Oracle,Oracle)