暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle JOB分为哪几类?

DB宝 2019-01-08
1606


题目部分

Oracle JOB分为哪几类?


     

答案部分


OracleJOB分为两类,DBMS_JOBDBMS_SCHEDULER,二者都可以完成定时任务。

1DBMS_JOB

DBMS_JOBSUBMIT过程参数如下所示:

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参数指示何时运行这个JOBNEXT_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;

2DBMS_SCHEDULER

DBMS_SCHEDULEROracle 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程序员面试笔试宝典》,作者:李华荣。



---------------优质麦课------------

 详细内容可以添加麦老师微信或QQ私聊。



About Me:小麦苗

 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

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

 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

 版权所有,欢迎分享本文,转载请保留出处

 QQ:646634621  QQ群:618766405

 提供OCP、OCM和高可用部分最实用的技能培训

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

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。


最后修改时间:2020-01-10 20:27:22
文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论