ORACLE 的SCHEDULER创建JOB

  • JOBS
    • 什么是JOBS
    • CREATE_JOB
    • 参数说明
    • 通过PLSQL创建JOBS
    • 管理 Jobs

JOBS

什么是JOBS

ORACLE 建议使用 Scheduler 替换普通的 job(DBMS_JOB),即在plsql工具中右边看到jobs

所谓 JOBS,其实就是 Scheduler 管理的一个(或多个)任务的执行调度。

CREATE_JOB

通过 DBMS_SCHEDULER 包来创建 Jobs,是使用其 CREATE_JOB 过程。在创建 Job 时,用户可以指定要
执行的任务,调度信息(执行时间,执行周期,终止日期等)以及其它一些任务相关的属性。

BEGINDBMS_SCHEDULER.CREATE_JOB (job_name =>   'INSERT_TEST_JOB',job_type  =>   'STORED_PROCEDURE',job_action      =>   'P_INSERTINTOTEST',start_date =>   sysdate,repeat_interval =>   'FREQ=DAILY;INTERVAL=1');END;/

有权限的话,用户也可以创建其它 SCHEMA 下的 JOB,只需要在指定 JOB_NAME 时,按照

schema.job_name 的格式即可。这种情况下创建的 JOB,其 CREATED 与 OWNER 有可能并不相同的。

参数说明

使用 CREATE_JOB 过程创建 JOB 时,可指定的参数值很多,只不过多数情况下用户仅指定部分参数即

可满足需求。

其中,上例中指定的参数,分别代表的含义如下:

  1. JOB_NAME:指定任务的名称,必选值,注意要确保指定的名称唯一。

2 JOB_TYPE:任务执行的操作类型,必选值,有下列几个可选值: PLSQL_BLOCK:表示任务执行的是一个 PL/SQL 匿名块。

3 STORED_PROCEDURE:表示任务执行的是 ORACLE 过程(含 PL/SQL PROCEDURE 和 JAVA PROCEDURE),本例中正是指定这一参数值。

4 EXECUTABLE:表示任务执行的是一个外部程序,比如说操作系统命令。

5 CHAIN:表示任务执行的是一个 CHAIN。

6 JOB_ACTION:任务执行的操作,必选值,应与 JOB_TYPE 类型中指定的参数相匹配。 比如说对于 PL/SQL 匿名块,此处就可以放置 PL/SQL 块的具体代表,类似 DECLARE … BEGIN …END 这类;如果是 ORACLE 过程,那么此处应该指定具体的过程名,注意由于任务执行,即使过程中有 OUT 之类参数,实际执行时也不会有输出的。

7 START_DATE:指定任务初次执行的时间,本参数可为空,当为空时,表示任务立刻执行,效果等同于指定该参数值为 SYSDATE。

8 REPEAT_INTERVAL:指定任务执行的频率,比如多长时间会被触发再次执行。本参数也可以为空,如果为空的话,就表示当前设定的任务只执行一次。REPEAT_INTERVAL 参数需要好好说说,因为这一参数与标准 JOB 中的 INTERVAL 参数有很大区别,相比之下,REPEAT_INTERVAL 参数的语法结构要复杂的多。其中最重要的是 FREQ 和 INTERVAL 两个关键字。

8.1 FREQ 关键字用来指定间隔的时间周期,可选参数有:YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY,分别表示年、月、周、日、时、分、秒等单位。

8.2 INTERVAL 关键字用来指定间隔的频繁,可指定的值的范围从 1-99。

例如:REPEAT_INTERVAL=>'FREQ=DAILY;INTERVAL=1';表示每天执行一次,如果将 INTERVAL 改为 7 就表示每 7 天执行一次,效果等同于 FREQ=WEEKLY;INTERVAL=1。

一般来说,使用 DBMS_SCHEDULER.CREATE_JOB 创建一个 JOB,至少需要指定上述参数中的前 3 项

除此之外,还可以在 CREATE_JOB 时,指定下列参数:

9 NUMBER_OF_ARGUMENTS:指定该 JOB 执行时需要附带的参数的数量,默认值为 0,注意当JOB_TYPE 列值为 PLSQL_BLOCK 或 CHAIN 时,本参数必须设置为 0,因为上述两种情况下不支持附带参数。

10 END_DATE:指定任务的过期时间,默认值为 NULL。任务过期后,任务的 STATE 将自动被修改为 COMPLETED,ENABLED 被置为 FALSE。如果该参数设置为空的话,表示该任务永不过期,将一直按照

REPEAT_INTERVAL 参数设置的周期重复执行,直到达到设置的 MAX_RUNS 或 MAX_FAILURES 值。

11 JOB_CLASS:指定任务关联的 CLASS,默认值为 DEFAULT_JOB_CLASS。关于 JOB CLASS 的信息就关注本系列的后续文章。

12 ENABLED:指定任务是否启用,默认值为 FALSE。FALSE 状态表示该任务并不会被执行,除非被用户手动调用,或者用户将该任务的状态修改为 TRUE。

13 AUTO_DROP:当该标志被置为 TRUE 时,ORACLE 会在满足条件时自动删除创建的任务

  • 任务已过期;

  • 任务 任务最大运行次数已达 MAX_RUNS 的设置值;

  • 任务 任务未指定 REPEAT_INTERVAL 参数,仅运行一次;

该参数的默认值即为 TRUE。用户在执行 CREATE_JOB 过程时可以手动将该标志指定为 FALSE,当参数值设置为 FALSE 时,即使满足上述提到的条件任务也不会被自动删除,这种情况下,唯一能够导致任务被删除的情况,就是用户主动调用 DROP_JOB 过程。

14 COMMENTS:设置任务的注释信息,默认值为 NULL。

例子创建了一个新的 JOB, 与普通 JOB 不同,此时查询 USER_JOBS 视图是查不到刚刚创建的 JOB 的信息,因为这个 JOB 是 SCHEDULER 管理的 JOB。要查询 SCHEDULER 管理的 JOS,应该通过 USER_SCHEDULER_JOBS(ALL_SCHEDULER_JOBS 和 DBA_SCHEDULER_JOBS 也可以)

通过PLSQL创建JOBS

管理 Jobs

1.2.1 启用 Jobs

前面创建 JOB 时,由于未显式的指定 ENABLED 参数,因此即使指定了 START_DATE,不过默认情况下 JOB不会自动执行。对于这种情况,DBMS_SCHEDULER 包中提供了一个过程 ENABLE,可以用来修改 JOB 的启用状态,调用方式非常单,例如:
JSSWEB> exec dbms_scheduler.enable(‘INSERT_TEST_TBL’); PL/SQL procedure successfully completed.

1.2.2 禁用 Jobs

DBMS_SCHEDULER.ENABLE 仅用来将 JOB(其实不仅仅对 JOB 有效,对于 CHAIN、PROGRAM 等也有效)的启用状态置为 TRUE。如果想将其启用状态置为 FALSE?简单,还有一个与该功能对应的过程:

DBMS_SCHEDULER.DISABLE,例如:

JSSWEB> exec dbms_scheduler.disable(‘INSERT_TEST_TBL’);

PL/SQL procedure successfully completed.

这两个过程仅用来重置对象的状态,因此均可以无限次执行,即使执行时对象已经被置为要指定的状态。

1.2.3 修改 Jobs

由于 JOB 的属性众多,难免时不时的可能会遇到需要修改的情况,比如说前面创建 JOB 时不小心,指定要执行的过程名输入错误(完全有可能,CREATE_JOB 在创建时不会自动检查指定的过程是否有效,从这方面考虑, SCHEDULER 不如普通 JOB 严谨哪),这种情况下就必然涉及到对 JOB 的修改(或者说重定义),没问题, DBMS_SCHEDULER 包中专门提供了一个过程 SET_ATTRIBUTE,可以用来修改任务属性值。

例如,修改刚刚创建的 JOB:INSERT_TEST_TBL 执行的过程,执行语句如下:

JSSWEB> exec dbms_scheduler.set_attribute(‘INSERT_TEST_TBL’,‘JOB_ACTION’,‘P_INSERTINTOTEST’);

PL/SQL procedure successfully completed

当然啦,我们这里执行的这条语句,执行跟没执行没有区别,此处仅做示例,大家表深究。

SET_ATTRIBUTE 过程虽然仅有三个参数,不过能够修改的属性值可是不少,以下列举几个较常用到的: LOGGING_LEVEL:指定对 jobs 执行情况记录的日志信息级别。

SCHEDULER 管理的 JOB 对任务的执行情况专门进行了记录,同时用户还可以选择日志中记录信息的级别,有下列三种选择:

  • DBMS_SCHEDULER.LOGGING_OFF:关闭日志记录功能;

  • DBMS_SCHEDULER.LOGGING_RUNS:对任务的运行信息进行记录;

  • DBMS_SCHEDULER.LOGGING_FULL:记录任务所有相关信息,不仅有任务的运行情况,甚至连任务的创建、修改等也均将记入日志。

提 示 : 查 看 SCHEDULER 管 理 的 JOB , 可 以 通 过 USER_SCHEDULER_JOB_LOG 和 USER_SCHEDULER_JOB_RUN_DETAILS 两个视图中查询

RESTARTABLE:指定 jobs 运行出错后,是否能够适时重启创建任务时如未明确指定,本参数默认情况下设置为 FALSE,如果设置为 TRUE,就表示当任务运行
时出错,下次运行时间点到达时仍会启动,并且如果运行仍然出错,会继续重新运行,不过如果连接出错达到 6 次,该 job 就会停止。

MAX_FAILURES:指定 jobs 最大连续出错次数该参数值可指定的范围从 1-1000000,默认情况下该参数设置为 NULL,表示无限制。达到指定出错次数后,该 job 会被自动 disable。

MAX_RUNS:指定 jobs 最大运行次数该参数值可指定的范围从 1-1000000,默认情况下该参数设置为 NULL,表示无限制(只是运行次数无
限制,实际 job 会否继续运行,仍受制于 end_date 以及 max_failures 等参数的设置)。达到指定运行次数后,该 job 也将被自动 disable,并且状态会被置为 COMPLETED。

JOB_TYPE:指定 job 执行的任务的类型

有四个可选值:‘PLSQL_BLOCK’, ‘STORED_PROCEDURE’, ‘EXECUTABLE’, and ‘CHAIN’。

JOB_ACTION:指定 job 执行的任务这一 参 数 所 指 定 的 值 依 赖 于 JOB_TYPE 参数 中 的 值 , 比 如 说 JOB_TYPE 设置 为

‘STORED_PROCEDURE’,那么本参数值中指定的一定是 ORACLE 中的过程名。

START_DATE:指定 job 初次启动的时间

END_DATE:指定 job 停止运行的时间本参数又与 AUTO_DROP 相关联,如果 AUTO_DROP 设置为 TRUE 的话,那么一旦 job 到达停止运行的时间,该 job 就会被自动删除,否则的话 job 任何存在,不过状态被修改为 COMPLETED。

除此之外,其它还包括 MAX_RUN_DURATION , JOB_WEIGHT , INSTANCE_STICKINESS , STOP_ON_WINDOW_CLOSE , JOB_PRIORITY , SCHEDULE_LIMIT , PROGRAM_NAME , NUMBER_OF_ARGUMENTS , SCHEDULE_NAME , REPEAT_INTERVAL , JOB_CLASS , COMMENTS , AUTO_DROP,EVENT_SPEC,RAISE_EVENTS 等等,这些参数所代表的意义此处不一一详述,感兴趣的朋友可以查阅相关官方文档。仅从这些可设置属性就可以看出,Scheduler 管理的 job 确实非常灵活,上述提到了这些参数,均可以使用

DBMS_SCHEDULER.SET_ATTRIBUTE 过程进行设置。

另外需要注意一点,除了用户手动创建的 jobs 之外,数据库在运行过程中也有可能自动创建 jobs。对于这
类 jobs 除非必要,否则不建议进行修改。至于如何区分 jobs 是用户创建,还是数据库自动创建,可以通过 *_SCHEDULER_JOBS 视图的 SYSTEM 列来确定,如果该列显示为 TRUE,则表示由系统创建

1.2.4 执行 Jobs

虽然说 jobs 大多都应该是自动执行,不过经过前面的示例,大家想必也认识到了,并不是说创建了 jobs 它就会自动执行,是否能够真正自动执行并不是由你的主观意愿就能直接决定,而是由 jobs 自身的多个相关属性决定。

关于 jobs 自动执行的话题相信看完前面的内容后,应该都知道如何设置,下面主要演示,如何手动调用 jobs 并执行,这其中,当然少不了 DBMS_SCHEDULER 包。例如,手动执行前面刚刚创建的 job:INSERT_TEST_TBL:

JSSWEB> exec dbms_scheduler.run_job(‘INSERT_TEST_TBL’);

PL/SQL procedure successfully completed

Jobs 每执行一次,无论成功或失败,均会在*_SCHEDULER_JOB_LOG 中生成一条对应的记录(前提是 LOGGING_LEVEL 属性值未设置为 DBMS_SCHEDULER.LOGGING_OFF) ,同时,用户也可以通过 *_SCHEDULER_JOB_RUN_DETAILS 视图查询 job 执行的详细信息。

1.2.5 停止 Jobs 停止 job 可以使用 DMBS_SCHEDULER.STOP_JOB 过程,例如:

JSSWEB> exec dbms_scheduler.stop_job(‘INSERT_TEST_TBL’);

PL/SQL procedure successfully completed

注意,STOP_JOB 过程不仅仅是更新 job 的状态,而是停止当前正在执行的任务,如果你处理的任务当前

未在运行的话,那么执行 STOP_JOB 过程,会触发 ORA-27366 错误。

停止 Jobs 也会触发一条任务的日志信息,对于执行停止操作的 job,其*_SCHEDULER_JOB_LOG 视图的

OPERATION 会记录为’STOPPED’,ADDITIONAL_INFO 列中记录的信息类似’REASON=“Stop job called by user: username”’。

1.2.6 删除 Jobs

删除创建的 job 就比较简单了,直接执行 DBMS_SCHEDULER.DROP_JOB 过程即可,例如:

JSSWEB> exec dbms_scheduler.drop_job(‘INSERT_TEST_TBL’);

PL/SQL procedure successfully completed

删除 jobs 并不是修改该 job 中某个字段的标记值,而是直接删除其在数据字典中的字义,因此被删除的 job 如果未来发现仍然需要,只能重建,而无法通过其它方式快速恢复。不过,删除 jobs 的操作,并不会级联删除这些 job 曾经执行过的日志信息。

ORACLE 的SCHEDULER创建JOB相关推荐

  1. Oracle 10g Scheduler 特性

    Oracle 10g Scheduler 特性 在10g 环境中,ORACLE 建议使用Scheduler 替换普通的job,来管理任务的执行.其实,将Scheduler 描述成管理job 的工具已经 ...

  2. linux oracle 用户创建,LINUX下Oracle数据库用户创建方法详解

    本文实例分析了LINUX下Oracle数据库用户创建方法.分享给大家供大家参考,具体如下: 1)登录linux,以oracle用户登录(如果是root用户登录的,登录后用 su - oracle命令切 ...

  3. mysql事件调度定时任务_详解MySQL用事件调度器Event Scheduler创建定时任务

    前言 事件调度器相当于操作系统中的定时任务(如:Linux中的cron.Window中的计划任务),但MySql的事件调度器可以精确到秒,对于一些实时性要求较高的数据处理非常有用. 1. 创建/修改事 ...

  4. oracle中表空间创建,Oracle 如何创建表空间

    在Oracle中如何创建表空间呢?主要有两种方式:一种是用sql命令的方式,另外一种是通过Oracle客户端Enterprise Manager Console来创建.下面分别介绍一下: 1 通过sq ...

  5. Oracle 序列的创建和使用

    Oracle 序列的创建和使用 创建序列 create sequence seq_a minvalue 1000 maxvalue 99999999 start with 1000 increment ...

  6. oracle基于dblink创建视图,【案例】Oracle dblink 数据库连接dblink insert操作数据类型发生改变...

    天萃荷净 开发DBA反映Oracle数据库两库之间通过dblink相连.在使用DML语句insert插入数据时操作的数据类型发生了改变 1.Oracle insert列属性 [oracle@saas- ...

  7. oracle中如何创建一个过程,如何开发ORACLE存储过程

    一. 概述 Oracle存储过程开发的要点是: • 使用Notepad文本编辑器,用Oracle PL/SQL编程语言写一个存储过程; • 在Oracle数据库中创建一个存储过程; • 在Oracle ...

  8. oracle为什么要创建数据库,手动创建Oracle数据库之前因后果

    对于许多数据库管理员来说,究 竟是不是一个难以管理和驾驭的怪兽级数据库,会不会让他们管理生涯饱受折磨?当看到其命令行界面时,很多人会问这么一个问题.如果你想通过一个应用程序操 控使用这个数据库,那么你 ...

  9. 如何在ORACLE CLOUD中创建和访问容器集群丨内附官方文档链接

    墨墨导读:本文描述如何在Oracle Cloud中创建并访问容器服务.为了简单,所有的操作都是针对root隔离区. 创建允许容器运行的政策官方文档链接 这一步是必须的,否则可以增加容器容器. 官方文档 ...

最新文章

  1. github 与git 使用 及配置
  2. ELNET服务被我删了,如何安装?
  3. 如何能在git bash中使用mvn命令_使用Github Actions完成CI/CD工作
  4. python基础学习(十二)变量进阶
  5. 计算机网络关于封装成帧题目,上海第二工业大学-计算机网络通信期中试卷答案...
  6. 无限踩坑系列(7)-Latex使用Tips
  7. Go Web 编程--超详细的模板库应用指南
  8. 8003.ros2创建win10工程
  9. highcharts 折线图 和柱状图读取 json值
  10. 网络驱动器映射成功但无法更新文件_FTP映射网络驱动器-ExpanDrive for mac
  11. 发现美,欣赏美,美之我见
  12. CAD三维图自动生成三视图
  13. Thinkbook16+ 2022 安装Ubuntu20.04
  14. php是什么症状脾虚什么症状怎么治,脾虚可能会产生什么症状呢?该如何治疗?...
  15. 分类classify
  16. 聪明的男人啊 多珍惜你身边的傻女人
  17. php psl标准,API 5L PSL1与PSL2标准的区别
  18. 考上这6所大学,毕业后就当公务员,堪称“公务员的摇篮”
  19. PvP实时抢红包游戏设计与实现
  20. 简单搞定python进制转换

热门文章

  1. C语言计算今天是今年的第几个周几
  2. 江苏事业单位招聘考计算机专业课,江苏省事业单位计算机专技岗备考指南
  3. 东南亚有多少个国家?
  4. 数据库系统之SQL简介
  5. 字符串的匹配搜索,在主字符串中搜寻子字符串,并给出此子字符串的起始位置,否则找不到
  6. idea如何打jar包和帮助文档
  7. MAC如何快速查看软件安装路径
  8. 识别文字什么软件?这几个实用的文字识别软件值得收藏
  9. 【cocos creator】编辑器里自动播放spine动画
  10. NO.005-2018.02.10《南歌子词二首 / 新添声杨柳枝词》唐代:温庭筠