前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试479】Oracle JOB分为哪几类?

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

作者头像
AiDBA宝典
发布2019-09-30 16:27:25
5150
发布2019-09-30 16:27:25
举报
文章被收录于专栏:小麦苗的DB宝专栏
题目部分

Oracle JOB分为哪几类?

答案部分

Oracle的JOB分为两类,DBMS_JOB和DBMS_SCHEDULER,二者都可以完成定时任务。

1、DBMS_JOB

DBMS_JOB的SUBMIT过程参数如下所示:

代码语言:javascript
复制
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的一个例子:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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和高可用部分最实用的技能培训

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档