欢迎来到天天文库
浏览记录
ID:30365379
大小:85.43 KB
页数:12页
时间:2018-12-29
《《oracle定时任务》word版》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、oracle定时任务oracle定时任务2010-07-2715:41DBMS_JOB系统包是Oracle"任务队列"子系统的API编程接口。DBMS_JOB包对于任务队列提供了下面这些功能:提交并且执行一个任务、改变任务的执行参数以及删除或者临时挂起任务等。DBMS_JOB包是由ORACLE_HOME目录下的rdbms/admin子目录下的DBMSJOB.SQL和PRVTJOB.PLB这两个脚本文件创建的。这两个文件被CATPROC.SQL脚本文件调用,而CATPROC.SQL这个文件一般是在数据库创建后立即执行的
2、。脚本为DBMS_JOB包创建了一个公共同义词,并给该包授予了公共的可执行权限,所以所有的Oracle用户均可以使用这个包。下面几个数据字典视图是关于任务队列信息的,主要有DBA_JOBS,USER_JOBS和DBA_JOBS_RUNNING。这些字典视图是由名为CATJOBQ.SQL的脚本文件创建的。该脚本文件和创建DBMS_JOB包的脚本文件一样在ORACLE_HOME目录的rdbms/admin子目录中,同样也是由脚本文件CATPROC.SQL调用。最后,要使任务队列能正常运行,还必须启动它自己专有的后台过程。
3、启动后台过程是通过在初始化文件init*.ora(实例不同,初始化文件名也略有不同)中设置初始化参数来进行的。下面就是该参数:JOB_QUEUE_PROCESSES=n其中,n可以是0到36之间的任何一个数。除了该参数以外,还有几个关于任务队列的初始化参数,本文后面将会对其进行详细讨论。DBMS_JOB包中包含有许多过程,见表1所示。表1DBMS_JOB包名称类型描述DBMS_JOB.ISUBMIT过程提交一个新任务,用户指定一个任务号DBMS_JOB.SUBMIT过程提交一个新任务,系统指定一个任务号DBMS_JO
4、B.REMOVE过程从队列中删除一个已经存在的任务DBMS_JOB.CHANGE过程更改用户设定的任务参数DBMS_JOB.WHAT过程更改PL/SQL任务定义DBMS_JOB.NEXT_DATE过程更改任务下一次运行时间DBMS_JOB.INTERVAL过程更改任务运行的时间间隔DBMS_JOB.BROKEN过程将任务挂起,不让其重复运行DBMS_JOB.RUN过程在当前会话中立即执行任务DBMS_JOB.USER_EXPORT过程创建文字字符串,用于重新创建一个任务三、DBMS_JOB包参数DBMS_JOB包中所
5、有的过程都有一组相同的公共参数,用于定义任务,任务的运行时间以及任务定时运行的时间间隔。这些公共任务定义参数见表2所示。表2DBMS_JOB过程的公共参数名称类型注释JobBINARY_INTEGER任务的唯一识别号WhatVARCHAR2作为任务执行的PL/SQL代码Next_dateVARCHAR2任务下一次运行的时间IntervalVARCHAR2日期表达式,用来计算下一次任务运行的时间下面我们来详细讨论这些参数的意义及用法。1、job参数job是一个整数,用来唯一地标示一个任务。该参数既可由用户指定也可由系统
6、自动赋予,这完全取决于提交任务时选用了那一个任务提交过程。DBMS_JOB.SUBMIT过程通过获得序列SYS.JOBSEQ的下一个值来自动赋予一个任务号。该任务号是作为一个OUT参数返回的,所以调用者随后可以识别出提交的任务。而DBMS_JOB.ISUBMIT过程则由调用者给任务指定一个识别号,这时候,任务号的唯一性就完全取决于调用者了。除了删除或者重新提交任务,一般来说任务号是不能改变的。即使当数据库被导出或者被导入这样极端的情况,任务号也将被保留下来。所以在执行含有任务的数据的导入/导出操作时很可能会发生任务号
7、冲突的现象。2、whatwhat参数是一个可以转化为合法PL/SQL调用的字符串,该调用将被任务队列自动执行。在what参数中,如果使用文字字符串,则该字符串必须用单引号括起来。what参数也可以使用包含我们所需要字符串值的VARCHAR2变量。实际的PL/SQL调用必须用分号隔开。在PL/SQL调用中如果要嵌入文字字符串,则必须使用两个单引号。what参数的长度在Oracle7.3中限制在2000个字节以内,在Oracle8.0以后,扩大到了4000个字节,这对于一般的应用已完全足够。该参数的值一般情况下都是对一个
8、PL/SQL存储过程的调用。在实际应用中,尽管可以使用大匿名Pl/SQL块,但建议大家最好不要这样使用。还有一个实际经验就是最好将存储过程调用封装在一个匿名块中,这样可以避免一些比较莫名错误的产生。我来举一个例子,一般情况下,what参数可以这样引用:what='my_procedure(parameter1);'但是比较安全的引用,应该这样写
此文档下载收益归作者所有