【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和高可用部分最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步