专栏首页小麦苗的DB宝专栏【DB笔试面试479】Oracle JOB分为哪几类?

【DB笔试面试479】Oracle JOB分为哪几类?

题目部分

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

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

本文分享自微信公众号 - DB宝(xiaomaimiaolhr),作者:小麦苗best

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【DB笔试面试481】如何判断SCHEDULER JOB是否正在运行?

    可以查询DBA_SCHEDULER_JOBS视图的STATE列,若STATE列的值为RUNNING,则代表当前的JOB正在运行。或者通过查询视图DBA_SCHE...

    小麦苗DBA宝典
  • 【DB笔试面试483】通过DBMS_SCHEDULER如何调用SHELL脚本?

    若是以普通用户执行上述代码的话,在执行过程中会遇到ORA-27486: insufficient privileges和ORA-27399: job type ...

    小麦苗DBA宝典
  • 【DB笔试面试484】如何批量删除JOB?

    可以采用SQL来生成删除JOB的语句,首先执行以下语句,可以根据情况对结果进行过滤:

    小麦苗DBA宝典
  • 【DB笔试面试481】如何判断SCHEDULER JOB是否正在运行?

    可以查询DBA_SCHEDULER_JOBS视图的STATE列,若STATE列的值为RUNNING,则代表当前的JOB正在运行。或者通过查询视图DBA_SCHE...

    小麦苗DBA宝典
  • 提升用户体验?指示性设计元素不可或缺

    日常生活中,当有人向你问路时,最好的办法就是给他们指出方向和路线。在web和app界面设计中也一样,设计师可以利用各种指示性设计元素引导用户,帮助用户找到自己想...

    奔跑的小鹿
  • BZOJ4373: 算术天才⑨与等差数列(线段树 hash?)

    第三条后面的可以直接推式子推出来(\(\sum_{i = 1}^n i^2 = \frac{n(n+1)(2n+1)}{6}\))

    attack
  • asp.net Forms身份验证详解

      在做网站的时候,都会用到用户登录的功能。对于一些敏感的资源,我们只希望被授权的用户才能够访问,这让然需要用户的身份验证。对于初学者,通常将用户登录信息存放在...

    thz
  • 【DB笔试面试644】在Oracle中,如何并发地收集统计信息?

    对于大表的统计信息收集可以通过DEGREE参数使得扫描大表的时候进行并行扫描,从而加快扫描速度,缩短了收集统计信息的时间。但是,即使加了DEGREE参数,在收集...

    小麦苗DBA宝典
  • 不能不说的设计秘密——4个步骤提升交互思维

    良好的用户体验包含很多内容:服务、产品、参与者的感受等等,显然产品功能的强大、界面的美观并不能完全概括体验。体验还包含在产品与用户之间的互动、产品与场景的交互、...

    腾讯大讲堂
  • linux-用户-用户组

    Linux 是一个多用户、多任务的操作系统,具有很好的稳定性与安全性,在幕后保障Linux 系统安全的则是一系列复杂的配置工作。

    suwanbin

扫码关注云+社区

领取腾讯云代金券