一、分析问题

事实上,对于以上需求,我们可以利用数据库本身拥有的功能Job Queue(任务队列管理器)去实现。任务队列管理器允许用户提前调度和安排某一任务,使其能在指定的时间点或时间段内自动执行一次或多次,由于任务在数据库中被执行,所以执行效率很高。

任务队列管理器允许我们定制任务的执行时间,并提供了灵活的处理方式,还可以通过配置,安排任务在系统用户访问量少的时段内执行,极大地提高了工作效率。例如,对于数据库日常的备份、更新、删除和复制等耗时长、重复性强的工作,我们就可以利用任务队列管理器去自动执行以减少工作量。

目前,拥有此项功能的数据库有许多,最有代表性的是SQL Server 7.0、Oracle 8.0.5等。但是,要让任务队列管理器工作,还需要我们加以配置才能实现。SQL Server的功能配置是在一个图形化界面(GUI)中实现的,非常简单。利用OEM客户端管理工具,Oracle的配置也可以在一个图形界面中完成。然而大多数的用户更习惯于命令行的方式去操纵数据库。本文介绍如何通过命令行实现这种配置。

二、实现步骤

1.确保Oracle的工作模式允许启动任务队列管理器

Oracle定时执行“Job Queue”的后台程序是SNP进程,而要启动SNP进程,首先要确保整个系统的模式是可以启动SNP进程的,这需要以DBA的身份去执行如下命令:

svrmgrl> alter system enable restricted session;

或sql> alter system disenable restricted session;

利用如上命令更改系统的会话方式为disenable restricted,为SNP的启动创造条件。

2.确保Oracle的系统已经配置了任务队列管理器的启动参数

SNP的启动参数位于Oracle的初始化文件中,该文件放在$ORACLE_HOME/dbs路径下,如果Oracle的SID是myora8的话,则初始化文件就是initmyora8.ora,在文件中对SNP启动参数的描述部分如下:

job_queue_process=n

job_queue_interval=N

第一行定义SNP进程的启动个数为n。系统缺省值为0,正常定义范围为0~36,根据任务的多少,可以配置不同的数值。

第二行定义系统每隔N秒唤醒该进程一次。系统缺省值为60秒,正常范围为1~3600秒。事实上,该进程执行完当前任务后,就进入睡眠状态,睡眠一段时间后,由系统的总控负责将其唤醒。

如果该文件中没有上面两行,请按照如上配置添加。配置完成后,需要重新启动数据库,使其生效。注意:如果任务要求执行的间隔很短的话,N的配置也要相应地小一点。

3.将任务加入到数据库的任务队列中

调用Oracle的dbms_job包中的存储过程,将任务加入到任务队列中:

dbms_job.submit( job out binary_integer,

what       in   archar2,

next_date     in   date,

interval     in   varchar2,

no_parse     in   boolean)

其中:

●job:输出变量,是此任务在任务队列中的编号;

●what:执行的任务的名称及其输入参数;

●next_date:任务执行的时间;

●interval:任务执行的时间间隔。

下面详细讨论一下dbms_job.submit中的参数interval。严格地讲,interval是指上一次执行结束到下一次开始执行的时间间隔,当interval设置为null时,该job执行结束后,就被从队列中删除。假如我们需要该job周期性地执行,则要用‘sysdate+m’表示。

将任务加入到任务队列之前,要确定执行任务的数据库用户,若用户是scott, 则需要确保该用户拥有执行包dbms_job的权限;若没有,需要以DBA的身份将权利授予scott用户:

svrmgrl> grant execute on dbms_job to scott;

4.将要执行的任务写成存储过程或其他的数据库可执行的pl/sql程序段

例如,我们已经建立了一个存储过程,其名称为my_job,在sql/plus中以scott用户身份登录,执行如下命令:

sql> variable n number;

sql> begin

dbms_job.submit(:n‘my_job;’,sysdate,

‘sysdate+1/360’);

commit;

end;

/

系统提示执行成功。

Sql> print :n;

系统打印此任务的编号,例如结果为300。

如上,我们创建了一个每隔4分钟执行一次的任务号为300的任务。可以通过Oracle提供的数据字典user_jobs察看该任务的执行情况:

sql> select job,next_date,next_sec,failures,broken from user_jobs;

执行结果如下:

job next_date next_sec failures broken

300 2000/10/10 11:45:15 0 N

这表示任务号为300的任务,下一次将在2000/10/10 11:45:15执行,此任务的执行失败记录为0次。注意:当执行job出现错误时,Oracle将其记录在日志里,失败次数每次自动加1。当执行失败次数达到16时,Oracle就将该job标志为broken。此后,Oracle不再继续执行它,直到用户调用过程dbms_job.broken,重新设置为not broken,或强制调用dbms_job.run来重新执行它。

除了以上我们讨论的submit存储过程之外,Oracle还提供了其他许多存储过程来操作任务。例如:dbms_job.change 、 dbms_job.what、dbms_job.interval可以用来修改提交的任务。要想删除该任务,只需运行dbms_job.remove(n)即可,其中n为任务号。

本文出自:亿恩科技【www.enkj.com】

oracle如何做定时任务,oracle实现定时任务相关推荐

  1. oracle中做数据字典,oracle中数据字典是干嘛用的啊

    数据字典中包 含: ● 数据库中所有方案对象(schema object)的定义(包括表,视图,索引,簇,同义词,序列,过程,函数,包,触发器等等) ● 数据库为一个方案对象分配了多少空间,以及该对象 ...

  2. Oracle Restart能够用来给Oracle GoldenGate 做 High Availability 使用么?

    Oracle Restart能够用来给Oracle GoldenGate  做 High Availability 使用么? 来源于: Can Oracle Restart be used with ...

  3. rda分析怎么做_利用Oracle RDA快速收集Oracle产品分析数据

    Remote Diagnostic Agent (RDA) 是一个工程师用Perl语言编写的命令行诊断工具,RDA提供统一的诊断工具支持包和预防的解决方法.提供给Oracle支持收集的客户环境全面的数 ...

  4. oracle是做什么用的,可以形容下Oracle有什么用,是干什么的吗?

    首先Oracle是一种超大规模型数据库,存储数据的量比一般数据库要大得多 Oracle数据库的体系结构 Oracle数据库包括Oracle数据库服务器和客户端. Oracle数据库服务器: Oracl ...

  5. oracle表如何做统计分析,oracle统计分析表信息

    作用: 为了使基于CBO的执行计划更加准确 Oracle数据库中的优化器又叫查询优化器(Query Optimizer).它是SQL分析和执行的优化工具,它负责生成.制定SQL的执行计划.Oracle ...

  6. oracle存储过程循环输入数据,oracle 存储过程循环插入数据

    Database 物理文件 控制文件(Control File) 1.一个数据库至少需要一个控制文件 2.控制文件(二进制文件)是一个很小的(通常是数据库中最小的)文件,大小一般在1-5M左右. 3. ...

  7. 关闭所有oracle服务,启动/关闭oracle服务有三种方式

    启动oracle服务有三种方式:1 从控制面板 2 使用MS-DOS命令 3 通过Oracle Administration Assistant for WindowsNT -通过控制面板启动orac ...

  8. linux创建数据库Oracle用户,linux下ORACLE数据库中创建新用户

     http://www.cnblogs.com/cloudwalf/archive/2008/09/04/1284033.html http://www.aiisen.com/oracle-lin ...

  9. oracle cdc 提交顺序,Oracle CDC部署流程

    一.ORACLE环境检查 查oracle数据库版本(>9.2.0.4.0). select * from v$version; BANNER Oracle Database 10g Enterp ...

  10. linux oracle 脚本,Linux的Oracle服务脚本

    Linux下安装完Oracle之后,安装程序并没有将Oracle安装为系统服务,重启系统后,Oracle还要手工启动,通过以下脚本,可以随开机启动Oracle.随关机停止Oracle服务. [php] ...

最新文章

  1. 浏览器兼容性--IE11以及Edge等下载文件的中文名出现乱码,前后端解决方案
  2. python十大高级特性_python--高级特性
  3. GMT 时间日期格式
  4. dig+host+nslookup 域名解析命令
  5. EntityFramework Core 2.0自定义标量函数两种方式
  6. 征集对Oracle的问题
  7. 安装sql时挂起的解决方法
  8. python使用正则表达式删除字符串中的数字
  9. SpringBoot +MyBatisPlus打印不出sql语句
  10. [高光谱] (6w字巨详细) GitHub开源项目Hyperspectral-Classification的解析
  11. Android Studio系列教程四--Gradle基础
  12. 零碎技术栈01_UML画图分析
  13. python自动生成采集规则_python 织梦自动采集更新脚本
  14. springboot+爱心捐赠小程序 毕业设计-附源码211711
  15. python实现规则引擎_几种开源规则引擎(BRE)的比较 转
  16. python sklearn PR曲线 AUPR值
  17. matlab 剪毛刺,MATLAB消除曲线毛刺Outlier Detection and Removal [hampel]
  18. python综合应用名片管理系统_综合应用——名片管理系统
  19. 为什么机会总是留给有准备的人?这是我听过最好的答案
  20. Response总结

热门文章

  1. adams 小车 平台 前行仿真
  2. QCA9531修改寄存器值控制GPIO
  3. 斯坦福NLP名课带学详解 | CS224n 第5讲 - 句法分析与依存解析(NLP通关指南·完结)
  4. 神州数码交换机建立VSF与删除VSF
  5. 整体橱柜效果图软件测试,别被效果图骗了,最适合中国人的厨房设计是这样的...
  6. 良田摄像头 linux,良田万能摄像头高拍仪驱动下载|良田万能摄像头驱动 官方版 - 软件下载 - 绿茶软件园|33LC.com...
  7. lcd驱动芯片测试软件,LCD Driver IC测试方法及其挑战
  8. hightopo学习之旅一 -- 节点动画
  9. linux下重启tomcat命令
  10. 11.4.2 内存映射的相关接口