




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DBMS_JOB包权限 角色权限:Execute on Dbms_Job SQLGRANT EXECUTE ON DBMS_JOB TO USER;DBMS_JOB控制参数控制参数:JOB_QUEUE_PROCESSES 同时可以进行的并发JOB的个数 默认为:10最大值:1000控制参数:JOB_QUEUE_INTERVAL 作业调度频率,S为单位,默认10S,10G以后该参数不存在DBMS_JOB后台进程 后台进程视图: V$BGPROCESS select name,description from v$bgprocess; JOB相关进程:CJQ0DBMS_JOB包解析DBMS_JOB包允许用户提前调度和安排某一任务,使其能在指定的时间点或时间段内自动执行一次或多次,由于任务在Oracle内部数据库中被执行,所以执行效率很高。DBMS_JOB包的子过程DBMS_JOB包 包含以下子过程: Isubmit()过程 Submit()过程 Remove()过程 Change()过程 What()过程 Next_Date()过程 Interval()过程 Run()过程 Broken()过程 User_Export()过程 WK_JOB PACKAGE-JOB进阶功能包1 Submit()过程:将任务加入到数据库的任务队列中DBMS_JOB.Submit ( job IN binary_ineger, WhatIN varchar2, next_date IN date, interval IN varchar2, no_parse INbooean:=FALSE) job参数:由Submit()过程返回的binary_ineger,用来唯一标识一个作业 what参数:将被执行的PL/SQL代码块 next_date参数:指示何时将运行这个作业 interval参数:何时这个作业将被重执行。 no_parse参数:指示此作业在提交时或执行时是否应进行语法分析 TRUE:指示此PL/SQL代码在它第一次执行时应进行语法分析 FALSE:指示本PL/SQL代码应立即进行语法分析说明1: interval参数是指上一次执行结束到下一次开始执行的时间间隔。当interval设置为null时,该job执行结束后,就被从队列中删除。假如我们需要该job周期性地执行,则要用sysdatem表示。说明2:将任务加入到任务队列之前,要确保执行任务的数据库用户拥有执行包dbms_job的权限。若没有该权限,则需要以DBA的身份将权利授予scott用户: SQL grant execute on dbms_job to scott;2 ISubmit()过程:用特定的作业号提交一个作业DBMS_JOB.ISubmit (job IN binary_ineger, WhatIN varchar2, next_date IN date, interval IN varchar2, no_parse IN booean:=FALSE) 这个过程与Submit()过程的唯一区别在于:此job参数作为IN型参数传递,且包括一个由开发者提供的作业号。如果提供的作业号已被使用,将产生一个错误。 3 Remove()过程:删除一个已计划运行的作业DBMS_JOB.Remove(Job INbinary_ineger) job参数:唯一地标识一个作业。这个参数的值是由为此作业调用Submit()过程返回的job参数的值。 注意:已正在运行的作业不能由调用过程序删除。 4 Change()过程:用来改变指定作业的任何字段的设置DBMS_JOB.Change (job IN binary_integer, What IN varchar2, next_date IN date, interval IN varchar2) job参数:由Submit()过程返回的binary_ineger,用来唯一标识一个作业 what参数:将被执行的PL/SQL代码块 next_date参数:指示何时将运行这个作业 interval参数:何时这个作业将被重执行。 5 What()过程:允许在作业执行时重新设置此正在运行的命令 DBMS_JOB.What (job IN binary_ineger, What IN varchar2) job参数:标识一个存在的作业 what参数:指示将被执行的新的PL/SQL代码 6 Next_Date()过程:显式地设定一个作业的执行时间DBMS_JOB.Next_Date(job IN binary_ineger, next_date IN date) Job参数:标识一个已存在的作业 Next _date参数:指示此作业应被执行的日期与时间 7 Interval()过程:显式地设置重执行一个作业之间的时间间隔数DBMS_JOB.Interval (jobIN binary_integer, Interval IN varchar2) job参数:标识一个特定的作业 interval参数:指示一个作业重执行的频度8 Run()过程:立即执行一个指定的作业会改变一个动态INTERVAL参数的执行参数,慎用DBMS_JOB.Run(job IN binary_ineger) job参数标识将被立即执行的作业。9 Broken()过程:设置broken标记。Broken作业从不运行。 DBMS_JOB.Broken (job IN binary_integer, broken IN boolean, next_date IN date default SYSDATE ) Job可能由于某种原因而未能成功执行。Oracle在重试16次后,还未能成功执行,则将该Job标记为broken。重新启动状态为broken的job,有如下两种方式:(1)利用dbms_job.run()立即执行该job begindbms_job.run(:jobno); end; / (2) 利用dbms_job.broken()重新将broken标记为falsebegin dbms_job.broken (:job, false, next_date);end; / 10 User_Export()过程:返回一个命令,此命令用来安排一个存在的作业,以便此作业能重新提交DBMS_JOB.User_Export(jobIN binary_ineger, my_callIN OUT varchar2) job参数标识一个安排了的作业。 my_call参数包含在它的当前状态重新提交此作业所需要的正文。 INTERVAL参数的说明DBMS_JOB的INTERVAL参数指示了作业的运行频率。 动态INTERVAL-从上一次执行到下一次执行的间隔时间表1 一些简单的interval参数设置例子描述Interval参数值每天运行一次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-制定的一定是一个固定的间隔时间表 2. 定时到特定日期或时间的任务例子描述INTERVAL参数值每天午夜12点TRUNC(SYSDATE + 1)每天早上8点30分TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)每星期二中午12点NEXT_DAY(TRUNC(SYSDATE ), TUESDAY ) + 12/24每个月第一天的午夜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) + (660+10)/(2460)注意1:使用next_day(sysdate,TUESDAY)时,需要修改设置日期格式。例如:SQL alter session set nls_date_language=American;注意2:使用next_day(sysdate,TUESDAY)时,必须使用Monday到Sunday的格式,否则出错(如使用星期一,出现隐形错误,显示的值不是周一,而是一个未知值)。INTERVAL的简单例子:1. 每分钟执行Interval =(TRUNC(sysdate,mi) +1/ (24*60)2. 每天定时执行例如:每天的凌晨2点执行Interval =(TRUNC(sysdate) +1)+2/ (24)3. 每周定时执行例如:每周一凌晨2点执行Interval =(TRUNC(next_day(sysdate,星期一)+2/244. 每月定时执行例如:每月1日凌晨2点执行Interval =(TRUNC(LAST_DAY(SYSDATE)+1)+2/245. 每季度定时执行例如每季度的第一天凌晨2点执行Interval =TRUNC(ADD_MONTHS(SYSDATE,3),Q) +2/246. 每半年定时执行例如:每年7月1日和1月1日凌晨2点Interval =ADD_MONTHS(trunc(sysdate,yyyy),6)+2/247. 每年定时执行例如:每年1月1日凌晨2点执行Interval =ADD_MONTHS(trunc(sysdate,yyyy),12)+2/24注意:关于每天的1的写法,建议设在TRUNC函数之外,不会出错,并且可以形成规范DBMS_JOB简单例子例1:(1)创建测试表SQL create table t1(c1 integer);(2)提交作业var v_job numberdeclare v_job number; v_what varchar2(1000) := insert into t1 values (9999);begin dbms_job.submit(job = :v_job, - job为输出参数 what = v_what, next_date = sysdate, interval = sysdate + 1 / 24); - 1小时一次 commit;end;/(3)查看作业信息SQL select job, next_date, next_sec, failures, broken, what from user_jobs;注:查看user_jobs表的各字段的含义:desc user_jobs(4)删除作业begin dbms_job.remove(:v_job); commit;end;/例2:(1)创建测试表create table test(a date); (2)创建一个自定义过程 create or replace procedure myproc as begin insert into test values(sysdate); commit;end; /(3)创建JOB variable job1 number begin - 每天1440分钟,即一分钟运行myproc过程一次dbms_job.submit(:job1,MYPROC;, sysdate, sysdate+1/1440);commit;end; /(4)运行JOB begin dbms_job.run(:job1); end; / (5)查看test表中的数据select to_char(a, yyyy/mm/dd hh24:mi:ss) 时间 from test; (6)修改下次执行时间(10分钟后执行)begindbms_job.next_date (:job1, SYSDATE + 10/(24*60);commit;end; /(7)删除JOB begindbms_job.remove(:job1); commit;end; /DBMS_JOB相关l Job的所查询Select sid,type,id1,id2 From v$lock Where lock_type like JQ;l Job的dba_jobs参数详解字段(列) 类型 描述JOB NUMBER 任务的唯一标示号LOG_USER VARCHAR2(30) 提交任务的用户PRIV_USER VARCHAR2(30) 赋予任务权限的用户SCHEMA_USER VARCHAR2(30) 对任务作语法分析的用户模式LAST_DATE DATE 最
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论