ImageVerifierCode 换一换
格式:DOCX , 页数:40 ,大小:39.11KB ,
资源ID:4421002      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4421002.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Oracle 10g Scheduler 特性.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Oracle 10g Scheduler 特性.docx

1、Oracle 10g Scheduler 特性Oracle 10g Scheduler 特性 分类: Oracle Basic Knowledge 2009-10-22 21:51 6813人阅读 评论(1) 收藏 举报 oraclejobsevents任务actionproperties Scheduler 可以简单简单的帮助我们调度成百上千的tasks。Oracle Scheduler 通过在DBMS_SCHEDULER PL/SQL 包中存储和过程来执行。一使用Jobs JOBS,其实就是Scheduler管理的一个(或多个)任务的执行调度。1.1创建Jobs 通过DBMS_SCHEDU

2、LER包来创建Jobs,是使用其CREATE_JOB过程。在创建Job时,用户可以指定要执行的任务,调度信息(什么时候执行,执行周期,终止日期等)以及其它一些任务相关的属性。例如:createtableTEST(idnumber);CREATEORREPLACEPROCEDUREITASBEGINinsertintoTESTVALUES(1);END;SQLBEGINDBMS_SCHEDULER.CREATE_JOB(job_name=JobTest,job_type=STORED_PROCEDURE,job_action=SYSTEM.IT,start_date=sysdate,repeat

3、_interval=FREQ=MINUTELY;INTERVAL=10);END;/ 事实上,有权限的话,用户也可以创建其它SCHEMA下的JOB,只需要在指定JOB_NAME时,按照schema.job_name的格式即可。这种情况下创建的JOB,其CREATED与OWNER有可能并不相同。当使用CREATE_JOB过程创建JOB时,可指定的参数值很多,只不过多数情况下用户仅指定部分参数即可满足需求。其中,上例中指定的参数,分别代表的含义如下:JOB_NAME:指定任务的名称,必选值,注意要确保指定的名称唯一。JOB_TYPE:任务执行的操作类型,必选值,有下列几个可选值:(1)PLSQL_

4、BLOCK:表示任务执行的是一个PL/SQL匿名块。(2)STORED_PROCEDURE:表示任务执行的是ORACLE过程(含L/SQLPROCEDURE和JAVA PROCEDURE),本例中正是指定这一参数值。(3)EXECUTABLE:表示任务执行的是一个外部程序,比如说操作系统命令。(4)CHAIN:表示任务执行的是一个CHAIN。JOB_ACTION:任务执行的操作,必选值,应与JOB_TYPE类型中指定的参数相匹配。比如说对于PL/SQL匿名块,此处就可以放置PL/SQL块的具体代表,类似DECLARE.BEGIN.END这类;如果是ORACLE过程,那么此处应该指定具体的过程名

5、,注意由于任务执行,即使过程中有OUT之类参数,实际执行时也不会有输出的。START_DATE:指定任务初次执行的时间,本参数可为空,当为空时,表示任务立刻执行,效果等同于指定该参数值为SYSDATE。REPEAT_INTERVAL:指定任务执行的频率,比如多长时间会被触发再次执行。本参数也可以为空,如果为空的话,就表示当前设定的任务只执行一次。REPEAT_INTERVAL参数与标准JOB中的INTERVAL参数有很大区别,相比之下,REPEAT_INTERVAL参数的语法结构要复杂的多。其中最重要的是FREQ和INTERVAL两个关键字。(1)FREQ关键字用来指定间隔的时间周期,可选参数

6、有:YEARLY,MONTHLY,WEEKLY,DAILY,HOURLY,MINUTELY,andSECONDLY,分别表示年、月、周、日、时、分、秒等单位。(2)INTERVAL关键字用来指定间隔的频繁,可指定的值的范围从1-99。例如:REPEAT_INTERVAL=FREQ=DAILY;INTERVAL=1;表示每天执行一次,如果将INTERVAL改为7就表示每7天执行一次,效果等同于FREQ=WEEKLY;INTERVAL=1。 一般来说,使用DBMS_SCHEDULER.CREATE_JOB创建一个JOB,至少需要指定上述参数中的前3项。除此之外,还可以在CREATE_JOB时,指定

7、下列参数:(1)NUMBER_OF_ARGUMENTS:指定该JOB执行时需要附带的参数的数量,默认值为0,注意当JOB_TYPE列值为PLSQL_BLOCK或CHAIN时,本参数必须设置为0,因为上述两种情况下不支持附带参数。(2)END_DATE:指定任务的过期时间,默认值为NULL。任务过期后,任务的STATE将自动被修改为COMPLETED,ENABLED被置为FALSE。如果该参数设置为空的话,表示该任务永不过期,将一直按照REPEAT_INTERVAL参数设置的周期重复执行,直到达到设置的MAX_RUNS或MAX_FAILURES值。(3)JOB_CLASS:指定任务关联的CLAS

8、S,默认值为DEFAULT_JOB_CLASS。(4)ENABLED:指定任务是否启用,默认值为FALSE。FALSE状态表示该任务并不会被执行,除非被用户手动调用,或者用户将该任务的状态修改为TRUE。(5)AUTO_DROP:当该标志被置为TRUE时,ORACLE会在满足条件时自动删除创建的任务 1)任务已过期; 2)任务最大运行次数已达MAX_RUNS的设置值; 3)任务未指定REPEAT_INTERVAL参数,仅运行一次; 该参数的默认值即为TRUE。用户在执行CREATE_JOB过程时可以手动将该标志指定为FALSE,当参数值设置为FALSE时,即使满足上述提到的条件任务也不会被自动

9、删除,这种情况下,唯一能够导致任务被删除的情况,就是用户主动调用DROP_JOB过程。(6)COMMENTS:设置任务的注释信息,默认值为NULL。 上面的例子创建了一个新的JOB,不过这个JOB与普通JOB不同,此时查询USER_JOBS视图是查不到刚刚创建的JOB的信息,因为这个JOB是SCHEDULER管理的JOB。要查询SCHEDULER管理的JOBS,应该通过user_scheduler_jobs(all_scheduler_jobs,dba_scheduler_jobs也可以),例如:SQLselectjob_name,job_type,job_action,to_char(sta

10、rt_date,yyyy-mm-ddhh24:mi:ss)TM,repeat_interval,enabled,statefromuser_scheduler_jobs;JOB_NAMEJOB_TYPEJOB_ACTIONTMREPEAT_INTERVALENABLSTATE-JOBTESTSTORED_PROCEDURESYSTEM.IT2009-09-25FREQ=MINUTELY;INTERVAL=10FALSEDISABLED 注意:JOB虽然成功创建了,但却并未执行.因为ENABLED参数当不显式指定时,该参数的默认值为false。1.2管理Jobs1.2.1启用Jobs 前面创建J

11、OB时,由于未显式的指定ENABLED参数,因此即使指定了START_DATE,不过默认情况下JOB不会自动执行。对于这种情况,DBMS_SCHEDULER包中提供了一个过程ENABLE,可以用来修改JOB的启用状态,调用方式非常简单,例如:SQLexecdbms_scheduler.enable(JOBTEST);PL/SQLproceduresuccessfullycompleted.1.2.2禁用Jobs DBMS_SCHEDULER.ENABLE仅用来将JOB(其实不仅仅对JOB有效,对于CHAIN、PROGRAM等也有效)的启用状态置为TRUE。如果想将其启用状态置为FALSE,还有

12、一个与该功能对应的过程:DBMS_SCHEDULER.DISABLE,如:SQLexecdbms_scheduler.disable(JOBTEST);PL/SQLproceduresuccessfullycompleted. 这两个过程仅用来重置对象的状态,因此均可以无限次执行,即使执行时对象已经被置为要指定的状态。1.2.3修改Jobs 由于JOB的属性众多,难免可能会遇到需要修改的情况,比如说前面创建JOB时不小心,指定要执行的过程名输入错误(CREATE_JOB在创建时不会自动检查指定的过程是否有效),这种情况下就必然涉及到对JOB的修改(或者说重定义),DBMS_SCHEDULER包

13、中专门提供了一个过程SET_ATTRIBUTE,可以用来修改任务的属性值。例如,修改刚刚创建的JOB:INSERT_TEST_TBL执行的过程,执行语句如下:SQLexecdbms_scheduler.set_attribute(JobTest,JOB_ACTION,SYSTEM.IT);PL/SQLproceduresuccessfullycompleted SET_ATTRIBUTE过程虽然仅有三个参数,不过能够修改的属性值可是不少,以下列举几个较常用到的:(1)LOGGING_LEVEL:指定对jobs执行情况记录的日志信息级别。SCHEDULER管理的JOB对任务的执行情况专门进行了记

14、录,同时用户还可以选择日志中记录信息的级别,有下列三种选择: 1)DBMS_SCHEDULER.LOGGING_OFF:关闭日志记录功能; 2)DBMS_SCHEDULER.LOGGING_RUNS:对任务的运行信息进行记录; 3)DBMS_SCHEDULER.LOGGING_FULL:记录任务所有相关信息,不仅有任务的运行情况,甚至连任务的创建、修改等也均将记入日志。 提示:查看scheduler管理的job,可以通过user_scheduler_job_log和user_scheduler_job_run_details两个视图中查询。(2)RESTARTABLE:指定jobs运行出错后,

15、是否能够适时重启创建任务时如未明确指定,本参数默认情况下设置为FALSE,如果设置为TRUE,就表示当任务运行时出错,下次运行时间点到达时仍会启动,并且如果运行仍然出错,会继续重新运行,不过如果连接出错达到6次,该job就会停止。(3)MAX_FAILURES:指定jobs最大连续出错次数该参数值可指定的范围从1-1000000,默认情况下该参数设置为NULL,表示无限制。达到指定出错次数后,该job会被自动disable。(4)MAX_RUNS:指定jobs最大运行次数,该参数值可指定的范围从1-1000000,默认情况下该参数设置为NULL,表示无限制(只是运行次数无限制,实际job是否继

16、续运行,仍受制于end_date以及max_failures等参数的设置)。达到指定运行次数后,该job也将被自动disable,并且状态会被置为COMPLETED。(5)JOB_TYPE:指定job执行的任务的类型,有四个可选值:PLSQL_BLOCK,STORED_PROCEDURE,EXECUTABLE,andCHAIN。(6)JOB_ACTION:指定job执行的任务.这一参数所指定的值依赖于JOB_TYPE参数中的值,比如说JOB_TYPE设置为STORED_PROCEDURE,那么本参数值中指定的一定是ORACLE中的过程名。(7)START_DATE:指定job初次启动的时间(8

17、)END_DATE:指定job停止运行的时间 本参数又与AUTO_DROP相关联,如果AUTO_DROP设置为TRUE的话,那么一旦job到达停止运行的时间,该job就会被自动删除,否则的话job任何存在,不过状态被修改为COMPLETED。 除此之外,其它还包括max_run_duration,job_weight,instance_stickiness,stop_on_window_close,job_priority,schedule_limit,program_name,number_of_arguments,schedule_name,repeat_interval,job_clas

18、s,comments,auto_drop,event_spec,raise_events等等。 另外需要注意一点,除了用户手动创建的jobs之外,数据库在运行过程中也有可能自动创建jobs。对于这类jobs除非必要,否则不建议进行修改。至于如何区分jobs是用户创建,还是数据库自动创建,可以通过*_SCHEDULER_JOBS视图的SYSTEM列来确定,如果该列显示为TRUE,则表示由系统创建。1.2.4执行Jobs 虽然说jobs大多都应该是自动执行,不过经过前面的示例看出,并不是说创建了jobs它就会自动执行,是否能够真正自动执行由jobs自身的多个相关属性决定。 可以使用DBMS_SCH

19、EDULER包手动调用jobs并执行。如:SQLexecdbms_scheduler.run_job(JOBTEST);PL/SQLproceduresuccessfullycompleted jobs每执行一次,无论成功或失败,均会在*_scheduler_job_log中生成一条对应的记录(前提是logging_level属性值未设置为dbms_scheduler.logging_off),同时,用户也可以通过*_scheduler_job_run_details视图查询job执行的详细信息。1.2.5停止Jobs 停止job可以使用DMBS_SCHEDULER.STOP_JOB过程,例如

20、:SQLexecdbms_scheduler.stop_job(JOBTEST);PL/SQLproceduresuccessfullycompleted 注意,STOP_JOB过程不仅仅是更新job的状态,而是停止当前正在执行的任务,如果你处理的任务当前未在运行的话,那么执行STOP_JOB过程,会触发ORA-27366错误。 停止Jobs也会触发一条任务的日志信息,对于执行停止操作的job,其*_SCHEDULER_JOB_LOG视图的OPERATION会记录为STOPPED,ADDITIONAL_INFO列中记录的信息类似REASON=Stopjobcalledbyuser:userna

21、me。1.2.6删除Jobs 删除创建的job就比较简单了,直接执行dbms_scheduler.drop_job过程即可,例如:SQLexecdbms_scheduler.drop_job(JOBTEST);PL/SQLproceduresuccessfullycompleted 删除jobs并不是修改该job中某个字段的标记值,而是直接删除其在数据字典中的字义,因此被删除的job如果未来发现仍然需要,只能重建,而无法通过其它方式快速恢复。不过,删除jobs的操作,并不会级联删除这些job曾经执行过的日志信息。二、使用Programs 进入10g版本之后,可以在ORACLE中执行操作系统命令

22、,或是ORACLE数据库外的应用,因为有了DBMS_SCHEDULER,因为有了PROGRAM。2.1创建Programs Scheduler中的Program对象并不是常规意义上的程序或应用,而就是一个对象,由DBA定义的,具有执行某项功能的特殊对象。Program中实际执行的操作可以分为下列三种类型:(1)PL/SQLBLOCK:标准的pl/sql代码块;(2)STOREDPROCEDURE:编译好的PL/SQL存储过程,或者Java存储过程,以及外部的子程序;(3)EXECUTEABLE:ORACLE数据库之外的应用,比如操作系统命令等等。 创建Programs使用DBMS_SCHEDU

23、LER.CREATE_PROGRAM过程,该过程支持的参数如下:SQLdescdbms_scheduler.create_program;ParameterTypeModeDefault-PROGRAM_NAMEVARCHAR2INPROGRAM_TYPEVARCHAR2INPROGRAM_ACTIONVARCHAR2INNUMBER_OF_ARGUMENTSBINARY_INTEGERINYENABLEDBOOLEANINYCOMMENTSVARCHAR2INY如上所示,前三项为必选参数,各参数实际代表的意义如下:(1)PROGRAM_NAME:指定一个program名称;(2)PROGRA

24、M_TYPE:Program的类型,如前文中所述,Program支持三种类型;(3)PROGRAM_ACTION:实际执行的操作,应与前面PROGRAM_TYPE参数关联使用。比如说前面指定了PROGRAM_TYPE为PLSQL_BLOCK,那么此处要执行的action就应当是一段标准的pl/sql代码。如果前面指定PROGRAM_TYPE为STORED_PROCEDURE,那么此处要执行的action就应当是ORACLE中定义好的存储过程(含Java存储过程),如果前面指定PROGRAM_TYPE为EXECUTABLE,那么此处就应该指定外部命令的命令行信息(含路径信息);(4)NUMBER

25、_OF_ARGUMENTS:指定支持的参数个数,默认值为0即没有参数。每个program最多能够支持255个参数,注意如果PROGRAM_TYPE设置为PLSQL_BLOCK,那么本参数自动忽略;(5)ENABLED:指定是否将创建的program置为有效状态,默认情况下为false。(6)COMMENTS:这个不用再说了吧,注释信息。 下面实际操作一下看看,PL/SQL或PROCEDURE没有挑战(ORACLE中直接即可调用),咱们创建一下program,直接调用操作系统中的ipconfig命令,操作如下:SQLBEGINDBMS_SCHEDULER.CREATE_PROGRAM(progr

26、am_name=IPCONFIG,program_action=C:/WINDOWS/system32/ipconfig.exe,program_type=EXECUTABLE,enabled=TRUE);END;/PL/SQLproceduresuccessfullycompleted.2.2管理Programs CREATE_PROGRAM过程的参数时提到,每个program最多支持255个参数,要为program添加参数,可以通过DEFINE_PROGRAM_ARGUMENT过程。不过在为其添加参数前,要注意program的NUMBER_OF_ARGUMENTS指定的数量,如果该值为0,

27、那么为其添加参数时就会报错。 查询创建的program的信息,可以通过USER_SCHEDULER_PROGRAMS视图,例如:SQLselectprogram_name,program_type,program_action,number_of_arguments,enabled fromuser_scheduler_programs; 由于前面创建program时並未指定NUMBER_OF_ARGUMENTS的值,因此我们这里需要首先修改该值为一个非0值,操作如下:SQLexecdbms_scheduler.set_attribute(IPCONFIG,NUMBER_OF_ARGUMENT

28、S,1);PL/SQLproceduresuccessfullycompleted. 另外需要注意,program的NUMBER_OF_ARGUMENTS参数不是说想改就能改的,正常情况下该处理必须是在program处于enabled之前确认完毕,否则会触发ORA-27465错误,因此要修改program的参数之前,必须首先确保要修改program的enabled状态为false。 那么对于已经处于enabled状态的program,在修改之前要修改其状态。如:SQLexecdbms_scheduler.disable(IPCONFIG);PL/SQLproceduresuccessfully

29、completed. 如果想启用,执行dbms_scheduler.enable过程即可。接下来,就可以为刚刚创建的IPCONFIG添加路径参数,操作如下:SQLBEGINDBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(program_name=IPCONFIG,argument_position=1,argument_name=dirpath,argument_type=VARCHAR2,default_value=C:/);END;/PL/SQLproceduresuccessfullycompleted.execDBMS_SCHEDULER.ENABLE(IPCONFIG); 查询为program定义的参数,可以通过user_scheduler_program_args视图,例如:SQLselectprogram_name,argument_name,argument_position,argument_typedefault_valuefromuser_scheduler_program_ar

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1