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和高可用部分最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步