Oracle定时执行计划任务

在日常工作中,往往有些事情是需要经常重复地做的,例如每天更新业务报表、每天从数据库中提取符合条件的数据、每天将客户关系管理系统中的数据分配给员工做数据库营销……因此我们就想:能不能让系统来自动定时执行计划任务?下面介绍的是在Oracle数据库中如何实现定时执行计划任务。
Oracle在10g版本以前,计划任务用的是DBMS_JOB包,10g版本引入DBMS_SCHEDULER来替代先前的DBMS_JOB,在功能方面,它比DBMS_JOB提供了更强大的功能和更灵活的机制/管理,但DBMS_JOB包的使用相对比较简单,也基本能够满足定时执行计划任务的需求,故接下来就先看看DBMS_JOB包的使用方法。我们可以在命令窗口输入show parameter job_queue_processes查看数据库中定时任务的最多并发数,一般设置为10(设置方法:alter system set job_queue_processes=10),如果设为0,那么数据库定时作业是不会运行的。
接下来我们尝试实现以下功能:每隔一分钟自动向job_test表中插入当前的系统时间。
1、创测试表
create table job_test(updatetime date);
2、创建JOB
variable v_job_no number;
begin
dbms_job.submit(:v_job_no, 'insert into job_test values(sysdate);', sysdate, 'sysdate+1/1440');
end;
/
其中最后一个参数'sysdate+1/1440'表示时间间隔为每分钟。其它常用的时间间隔的设置如下:
(1)如果想每天凌晨1点执行,则此参数可设置为'trunc(sysdate)+25/24';
(2)如果想每周一凌晨1点执行,则此参数可设置为'trunc(next_day(sysdate,1))+25/24';
(3)如果想每月1号凌晨1点执行,则此参数可设置为'trunc(last_day(sysdate))+25/24';
(4)如果想每季度执行一次,则此参数可设置为'trunc(add_months(sysdate,3),'Q')+1/24';
(5)如果想每半年执行一次,则此参数可设置为'add_months(trunc(sysdate,'yyyy'),6)+1/24';

(6)如果想每年执行一次,则此参数可设置为'add_months(trunc(sysdate,'yyyy'),12)+1/24'。
 
DBMS_SCHEDULER的功能更强大,定义更灵活,增强了与系统的交互性。举例如下:
 
begin 
       dbms_scheduler.create_job (
       job_name => '测试',
       job_type => 'PLSQL_BLOCK',
       job_action => 'insert into job_test values(sysdate);',
       start_date => sysdate,
       end_date => add_months(sysdate,12000),
       repeat_interval => 'FREQ=MINUTELY; INTERVAL=1',
       enabled => true,
       comments => '定时执行计划任务'
       );
end;
 
以上代码可以通过在PLSQL Developer中新建Jobs轻松设定:
以上是本人以自己的实际情况配置的调用的是存储过程、使用的是一年中的每个月的14、15号23:23:59秒执行
参数含义如下:
•JOB_NAME :指定任务的名称,必选值,注意要确保指定的名称唯一。
•JOB_TYPE :任务执行的操作类型,必选值,有下列几个可选值:
  ◦PLSQL_BLOCK :表示任务执行的是一个PL/SQL匿名块。
  ◦STORED_PROCEDURE :表示任务执行的是ORACLE过程(含PL/SQL PROCEDURE和JAVA PROCEDURE)。
  ◦EXECUTABLE :表示任务执行的是一个外部程序,比如说操作系统命令。
  ◦CHAIN :表示任务执行的是一个CHAIN。
•JOB_ACTION :任务执行的操作,必选值,应与JOB_TYPE类型中指定的参数相匹配。比如说对于PL/SQL匿名块,此处就可以放置PL/SQL块的具体代表,类似DECLARE .. BEGIN ..END这类;如果是ORACLE过程,那么此处应该指定具体的过程名,注意由于任务执行,即使过程中有OUT之类参数,实际执行时也不会有输出的。
•START_DATE :指定任务初次执行的时间,本参数可为空,当为空时,表示任务立刻执行,效果等同于指定该参数值为SYSDATE。
•REPEAT_INTERVAL :指定任务执行的频率,比如多长时间会被触发再次执行。本参数也可以为空,如果为空的话,就表示当前设定的任务只执行一次。REPEAT_INTERVAL参数需要好好说说,REPEAT_INTERVAL参数的语法结构要复杂的多。其中最重要的是FREQ和INTERVAL两个关键字。
  ◦FREQ 关键字用来指定间隔的时间周期,可选参数有:YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY,分别表示年、月、周、日、时、分、秒等单位。
  ◦INTERVAL 关键字用来指定间隔的频繁,可指定的值的范围从1-99。
例如:REPEAT_INTERVAL=>'FREQ=DAILY;INTERVAL=1';表示每天执行一次,如果将INTERVAL改为7就表示每7天执行一次,效果等同于FREQ=WEEKLY;INTERVAL=1。
一般来说,使用DBMS_SCHEDULER.CREATE_JOB创建一个JOB,至少需要指定上述参数中的前3项。除此之外,还可以在CREATE_JOB时,指定下列参数:
•NUMBER_OF_ARGUMENTS :指定该JOB执行时需要附带的参数的数量,默认值为0,注意当JOB_TYPE列值为PLSQL_BLOCK或CHAIN时,本参数必须设置为0,因为上述两种情况下不支持附带参数。
•END_DATE :指定任务的过期时间,默认值为NULL。任务过期后,任务的STATE将自动被修改为COMPLETED,ENABLED被置为FALSE。如果该参数设置为空的话,表示该任务永不过期,将一直按照REPEAT_INTERVAL参数设置的周期重复执行,直到达到设置的MAX_RUNS或MAX_FAILURES值。
•JOB_CLASS :指定任务关联的CLASS,默认值为DEFAULT_JOB_CLASS。
•ENABLED :指定任务是否启用,默认值为FALSE。FALSE状态表示该任务并不会被执行,除非被用户手动调用,或者用户将该任务的状态修改为TRUE。
•AUTO_DROP :当该标志被置为TRUE时,ORACLE会在满足条件时自动删除创建的任务
  ◦任务已过期;
  ◦任务最大运行次数已达MAX_RUNS的设置值;
  ◦任务未指定REPEAT_INTERVAL参数,仅运行一次;
•COMMENTS :设置任务的注释信息,默认值为NULL。
 
还有一些的功能和参数没有做详细说明,可参考:
2、DBMS_SCHEDULER 带参数JOB
 

欢迎评论和转载,转载请注明来源于@数据化分析 的博客:http://blog.sina.com.cn/data2analysis,除非特别声明,本站采用许可:署名,非商业。多谢支持!

(转)Oracle定时执行计划任务的更多相关文章

  1. oracle定时执行计划任务

    show parameter job_queue_processes; alter system set job_queue_processes=10; 1,创建测试表 create table jo ...

  2. 怎样看懂Oracle的执行计划

    怎样看懂Oracle的执行计划 一.什么是执行计划 An explain plan is a representation of the access path that is taken when ...

  3. 【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题

    记录通过执行Oracle的执行计划查询SQL脚本中的效率问题   问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件.   首先,Quartz表达式培植的启 ...

  4. Oracle的执行计划(来自百度文库)

    如何开启oracle执行计划 http://wenku.baidu.com/view/7d1ff6bc960590c69ec37636.html怎样看懂Oracle的执行计划 http://wenku ...

  5. Oracle sql执行计划解析

    Oracle sql执行计划解析 https://blog.csdn.net/xybelieve1990/article/details/50562963 Oracle优化器 Oracle的优化器共有 ...

  6. Oracle定时执行存储过程(转)

    定时执行存储过程在平时开发中经常会用到,年前的时候自己也做了一个,由于时间关系一直没能记录,现记录下来.       首先用一个完整的例子来实现定时执行存储过程. 任务目标:每小时向test表中插入一 ...

  7. 分析oracle的执行计划(explain plan)并对对sql进行优化实践

    基于oracle的应用系统很多性能问题,是由应用系统sql性能低劣引起的,所以,sql的性能优化很重要,分析与优化sql的性能我们一般通过查看该sql的执行计划,本文就如何看懂执行计划,以及如何通过分 ...

  8. oracle sql 执行计划分析

    转自http://itindex.net/detail/45962-oracle-sql-%E8%AE%A1%E5%88%92 一.首先创建表 SQL> show user USER is &q ...

  9. Oracle 11g 执行计划管理1

    1. 执行计划管理的工作原理 1.1控制执行计划的稳定性 11g之前,可以使用存储大纲(stored outline)和SQL Profile来固定某条SQL语句的执行计划,防止由于执行计划发生变化而 ...

随机推荐

  1. Java学习笔记——鸵鸟学习记(三)

    8,对象的创建与销毁 a, 构造方法——在构造对象的时候同时传入相关的属性 用于构造对象的方法(当创建对象时调用的方法) 规则:1)方法名与类名相同 2)无返回值 package my; public ...

  2. pycharm移动项目文件后,运行报错

    pycharm移动项目文件后,运行报错: ModuleNotFoundError:  No module named 'D:/my_project/my_cases/email139cases/tes ...

  3. thingsboard改造使用mysql数据库

    thingsboard从2.2版本开始,兼容关系型数据库与非关系型数据库共用(关系型数据库保存实体类信息.非关系型数据库cassandra保存遥测数据信息).由于国内偏向使用mysql数据库,而非po ...

  4. React列表

    const numbers = [1, 2, 3, 4, 5]; const listItems = numbers.map((numbers) => <li>{numbers}&l ...

  5. 1024程序员节宅男节日快乐 -- JAVA快速开发平台,JEECG 3.8宅男优化版本发布

    JEECG 3.8 版本发布,系统全面升级,重构上传组件.优化代码生成器机制! 导读   ⊙平台性能优化,系统更稳定,速度闪电般提升 ⊙系统上传组件全面重构,使用plupload组件,解决flash的 ...

  6. Winform 中写代码布局中遇到的控件遮盖问题

    在winform中编程时,需要动态向主窗体中增加菜单栏和用户控件,菜单栏需要设置DockStyle为Top ,而设置用户控件的DockStyle为Fill,之后在加载的时候,出现了菜单栏遮盖用户控件的 ...

  7. Stack类常用api

    1.构造函数 Stack只有一个默认构造函数 Stack() Stack<Integer> stack = new Stack<Integer>(); 2.常用api (1)入 ...

  8. JAVA_Class.forName()用法详解

    Class.forName(xxx.xx.xx)返回的是一个类. Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,JVM会执行该类的静态代码段. Class.fo ...

  9. linux 环境变量 转

    https://www.cnblogs.com/aaronLinux/p/5837702.html export PATH=/home/one/:$PATH export PATH=$PATH:/ho ...

  10. Hadoop学习笔记记录

    NameNode的介绍: NameNode是HDFS的核心,也称为master,它仅存储元数据(文件系统中所有文件的目录树) NameNode不存储实际的数据或数据集,数据本身存储在DateNodes ...