Oracle Job描述_第1页
Oracle Job描述_第2页
Oracle Job描述_第3页
Oracle Job描述_第4页
Oracle Job描述_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 表示 任务重复运行的时间间隔取决于 interval 参数中设置的日期表达式 下面就来详细谈谈 该如何设置 interval 参数才能准确满足我们的任务需求 一般来讲 对于一个任务的定 时执行 有三种定时要求 在一个特定的时间间隔后 重复运行该任务 在特定的日期和时间运行任务 任务成 功完成后 下一次执行应该在一个特定的时间间隔之后 第一种调度任务需求的日期算法比较简单 即 SYSDATE n 这里 n 是一个以天为单位的 时间间隔 表 1 给出了一些这种时间间隔设置的例子 表 1 一些简单的 interval 参数设置例子 描述描述IntervalInterval 参数值参数值 每天运行一次 SYSDATE 1 每小时运行一次 SYSDATE 1 24 每 10 分钟运行一次 SYSDATE 10 60 24 每 30 秒运行一次 SYSDATE 30 60 24 60 每隔一星期运行一次 SYSDATE 7 不再运行该任务并删除它 NULL 表 1 所示的任务间隔表达式不能保证任务的下一次运行时间在一个特定的日期或者时间 仅仅能够指定一个任务两次运行之间的时间间隔 例如 如果一个任务第一次运 行是在 凌晨 12 点 interval 指定为 SYSDATE 1 则该任务将被计划在第二天的凌晨 12 点执 行 但是 如果某用户在下午 4 点手工 DBMS JOB RUN 执行了该任务 那么该任务将 被重新定时到 第二天的下午 4 点 还有一个可能的原因是如果数据库关闭或者说任务队 列非常的忙以至于任务不能在计划的那个时间点准时执行 在这种情况下 任务将试图 尽快 运行 也就是说只要数据库一打开或者是任务队列不忙就开始执行 但是这时 运 行时间已经从原来的提交时间漂移到了后来真正的运行时间 这种下一次运行时间 的不 断 漂移 是采用简单时间间隔表达式的典型特征 第二种调度任务需求相对于第一种就需要更复杂的时间间隔 interval 表达式 表 7 是一些要求在特定的时间运行任务的 interval 设置例子 表 2 定时到特定日期或时间的任务例子 描述描述INTERVALINTERVAL 参数值参数值 每天午夜 12 点 TRUNC SYSDATE 1 每天早上 8 点 30 分 TRUNC SYSDATE 1 8 60 30 24 60 每星期二中午 NEXT DAY TRUNC SYSDATE TUESDAY 12 24 12 点 每个月第一天 的午夜 12 点 TRUNC LAST DAY SYSDATE 1 每个季度最后 一天的晚上 11 点 TRUNC ADD MONTHS SYSDATE 2 24 3 Q 1 24 每星期六和日 早上 6 点 10 分 TRUNC LEAST NEXT DAY SYSDATE SATURDAY NEXT DAY SYSDATE SUNDAY 6 60 10 24 60 第三种调度任务需求无论通过怎样设置 interval 日期表达式也不能满足要求 这时因为 一个任务的下一次运行时间在任务开始时才计算 而在此时是不知道 任务在何时结束的 遇到这种情况怎么办呢 当然办法肯定是有的 我们可以通过为任务队列写过程的办法 来实现 这里我只是简单介绍以下 可以在前一个任务队 列执行的过程中 取得任务完 成的系统时间 然后加上指定的时间间隔 拿这个时间来控制下一个要执行的任务 这 里有一个前提条件 就是目前运行的任务本身必 须要严格遵守自己的时间计划 将任务加入到任务队列之前 要确定执行任务的数据库用户 若用户是 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 为任务号 对于 DBA 来说 数据库 Job 再熟悉不过了 因为经常要数据库定时的自动执行 一些脚本 或做数据库备份 或做数据的提炼 或做数据库的性能优化 包括 重建索引等等的工作 但是 Oracle 定时器 Job 时间的处理上 千变万化 今 天我把比较常用写法汇总如下 在总结之前 先把 Job 的参数一一说明一下 job 参数是由 Submit 过程返回的 binary ineger 这个值用来唯一标识一个工作 what 参数是将被执行的 PL SQL 代码块 next date 参数指识何时将运行这个工作 写 Job 的时候可以不指定该值 interval 参数何时这个工作将被重执行 其中 Interval 这个值是决定 Job 何时 被重新执行的关键 例如 有存储过程 p dosomethings 需要被不同的时间间隔执行 1declare 2 jobno number 3begin 4 dbms job submit 5 jobno 6 p dosomething what 7 to date 20090101020000 yyyy mm dd hh24 mi ss next date 可以不填 8 Interval 时间字符串 interval 关键设置 9 10 commit 11end 12 1 每分钟执行 Interval TRUNC sysdatesysdate mi 1 24 60 2 每天定时执行 例如 每天的凌晨 2 点执行 Interval TRUNC sysdatesysdate 1 2 24 3 每周定时执行 例如 每周一凌晨 2 点执行 Interval TRUNC next day sysdatesysdate 星期一 2 24 4 每月定时执行 例如 每月 1 日凌晨 2 点执行 Interval TRUNC LAST DAY SYSDATESYSDATE 1 2 24 5 每季度定时执行 例如每季度的第一天凌晨

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论