【DB筆試面試479】Oracle JOB分為哪幾類?

  • 2019 年 10 月 11 日
  • 筆記

題目部分

Oracle JOB分為哪幾類?

答案部分

Oracle的JOB分為兩類,DBMS_JOB和DBMS_SCHEDULER,二者都可以完成定時任務。

1、DBMS_JOB

DBMS_JOB的SUBMIT過程參數如下所示:

SQL> DESC DBMS_JOB.SUBMIT  Parameter Type           Mode Default?  --------- -------------- ---- --------  JOB       BINARY_INTEGER OUT  WHAT      VARCHAR2       IN  NEXT_DATE DATE           IN   Y  INTERVAL  VARCHAR2       IN   Y  NO_PARSE  BOOLEAN        IN   Y  INSTANCE  BINARY_INTEGER IN   Y  FORCE     BOOLEAN        IN   Y

其中,各個參數的說明如下所示:

(1) 參數JOB是由SUBMIT()過程返回的BINARY_INEGER。這個值用來唯一標識一個工作,此參數是個變量,在使用前需要被聲明,JOB號在DBA_JOBS視圖裡可以查到。

(2) WHAT參數的值是將被JOB執行的PL/SQL代碼塊,一般是存儲過程的名字,記得存儲過程後面一定要加上分號。但是,若WHAT的參數為PL/SQL匿名塊,則需要加上分號,例如,what=> 'begin null; end;'。

(3) NEXT_DATE參數指示何時運行這個JOB,NEXT_DATE需要修改為數據庫第一次執行該JOB的時間,SYSDATE表示立即執行。

(4) INTERVAL參數表示這個JOB什麼時候將被再次執行,指定JOB的運行周期,INTERVAL為空表示只執行一次。

(5) NO_PARSE參數表示此JOB在提交或執行時是否應進行語法分析,TRUE代表此PL/SQL代碼在它第一次執行時應進行語法分析,而FALSE代表本PL/SQL代碼應立即進行語法分析,在創建JOB時進行檢查。默認值為FALSE。

需要注意的是,NEXT_DATE是時間類型,INTERVAL是字符類型,在調用SUBMIT時要指定正確的參數類型。

以下是創建DBMS_JOB的一個例子:

DECLARE      V_JOB NUMBER;  BEGIN      DBMS_JOB.SUBMIT(JOB    =>V_JOB,                      WHAT      =>'PRO_TEST_JOB;',                      NEXT_DATE =>SYSDATE,                      INTERVAL  =>'SYSDATE + 1 / (24 * 60)');  SYS.DBMS_OUTPUT.PUT_LINE('JOB NUMBER IS: ' || V_JOB);      COMMIT;  END;

2、DBMS_SCHEDULER

DBMS_SCHEDULER是Oracle 10g中新增的一個包,與老版本的DBMS_JOB包相比,DBMS_SCHEDULER有很多新特性。例如,DBMS_SCHEDULER可以執行存儲過程、匿名塊以及OS可執行文件和腳本(包括Linux系統的SHELL腳本),還可以使用DBMS_SCHEDULER更詳細地定義JOB的各類屬性。DBMS_SCHEDULER具有更詳細的作業運行狀態以及故障處理和報告功能。

從Oracle 10g開始,Oracle建議使用SCHEDULER替換普通的JOB來管理任務的執行。

下面的例子展示了如何創建一個DBMS_SCHEDULER類型的JOB:

BEGIN      DBMS_SCHEDULER.CREATE_JOB(JOB_NAME  => 'AGENT_LIQUIDATION_JOB', --要創建的JOB名稱                                JOB_TYPE        => 'STORED_PROCEDURE',                                JOB_ACTION      => 'AGENT_LIQUIDATION.LIQUIDATION', --存儲過程名                                START_DATE      => SYSDATE,                                REPEAT_INTERVAL => 'FREQ=MONTHLY; INTERVAL=1; BYMONTHDAY=1;BYHOUR=1;BYMINUTE=0;BYSECOND=0', --按月執行,間隔為1個月,每月1號,凌晨1點執行                                COMMENTS        => 'SECOND');--JOB的注釋  END;

本文選自《Oracle程序員面試筆試寶典》,作者:李華榮。

About Me:小麥苗

● 本文作者:小麥苗,只專註於數據庫的技術,更注重技術的運用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列題目來源於作者的學習筆記,部分整理自網絡,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

● QQ:646634621 QQ群:618766405

● 提供OCP、OCM和高可用部分最實用的技能培訓

● 題目解答若有不當之處,還望各位朋友批評指正,共同進步