1、版权所有 2008,,Oracle。,保留所有权利。,18-,*,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,使用调度程序自动执行任务,课程目标,学完本课后,应能完成以下工作:,使用调度程序来简化管理任务,创建作业、程序和调度,监视作业执行,使用基于时间的或基于事件的调度来执行调度程序作业,简化管理任务,在每月的最后一天,执行一系列月末任务,通过实体化视图刷新来复制表数据,每天计算两次表,和索引统计信息,每小
2、时生成一个有关,无效服务器访问尝试的报表,运行每日作业来备份数据库,文件到达文件系统后,立即启动成批装入,消息入队后立即运行出队过程,重建完当前索引后,重建另一索引,一个简单作业,内容,时间,主要组件和步骤,要使用调度程序简化管理任务,请执行以下步骤:,1.,创建程序。,2.,创建并使用调度。,3.,创建并提交作业。,4.,监视作业。,变元,作业,程序,作业属性,调度,1.创建程序,BEGIN,DBMS_SCHEDULER.CREATE_PROGRAM(,program_name=CALC_STATS2,program_action=HR.UPDATE_HR_SCHEMA_STATS,prog
3、ram_type=STORED_PROCEDURE,enabled=TRUE);,END;,/,2.创建并使用调度,BEGIN,DBMS_SCHEDULER.CREATE_SCHEDULE(,schedule_name=stats_schedule,start_date=SYSTIMESTAMP,end_date=SYSTIMESTAMP+30,repeat_interval=,FREQ=HOURLY;INTERVAL=1,comments=Every hour);,END;,/,3.创建并运行作业,4.监视作业,SELECT job_name,status,error#,run_durati
4、on,FROM USER_SCHEDULER_JOB_RUN_DETAILS;,JOB_NAME STATUS ERROR#RUN_DURATION,-,GATHER_STATS_JOB SUCCESS 0 +000 00:08:20,PART_EXCHANGE_JOB FAILURE 6576 +000 00:00:00,使用基于时间的或基于事件的调度,调度,事件,时间,创建基于时间的作业,示例:创建一个作业,从今晚起在每晚 11:00 调用备份脚本。,BEGIN,DBMS_SCHEDULER.CREATE_JOB(,job_name=HR.DO_BACKUP,job_type,=EXECU
5、TABLE,job_action,=/home/usr/dba/rman/nightly_incr.sh,start_date,=SYSDATE,repeat_interval,=FREQ=DAILY;BYHOUR=23,/*next night at 11:00 PM*/,comments=Nightly incremental backups);,END;,/,持久轻量作业,持久轻量作业:,减少启动作业所需的开销和时间,作业元数据和运行时数据在磁盘上占用很小的空间,可恢复,因为占用空间很小,是使用作业模板创建的,因而可以便捷地创建多个作业,选择合适的作业类型,定期作业:,灵活性最高,但在执
6、行创建/删除时会产生一些性能开销,需要创建和删除作业数据库对象,持久轻量作业:,产生的开销较低,因为它们不需要创建数据库对象,需要使用模板,从父作业模板中继承其权限,在,DBA,需要在很短的时间内创建大量作业的情况下很有用,创建单个,轻量作业,BEGIN,DBMS_SCHEDULER.CREATE_JOB(,job_name =my_lightweight_job1,program_name =MY_PROG,repeat_interval =FREQ=DAILY;BY_HOUR=9,end_time =30-APR-07 04.00.00 AM CST,job_style =LIGHTWEI
7、GHT);,END;,/,BEGIN,DBMS_SCHEDULER.CREATE_JOB(,job_name =my_lightweight_job2,program_name =MY_PROG,schedule_name =MY_SCHED,job_style =LIGHTWEIGHT);,END;,/,创建基于事件的调度,要创建基于事件的作业,必须设置:,队列说明(应用程序将消息入队以启动作业),事件条件(与,Oracle Streams AQ,规则条件的语法相同),如果为,TRUE,则启动作业,Oracle DB,调度程序,事件,ADT,(抽象数据类型),队列,应用程序,使用,Oracl
8、e Enterprise Manager,创建基于事件的调度,创建基于事件的作业,示例:创建一个作业,如果成批装入的数据文件在上午 9:00 之前到达文件系统,则运行此作业。,BEGIN,DBMS_SCHEDULER.CREATE_JOB(,job_name=ADMIN.PERFORM_DATA_LOAD,job_type=EXECUTABLE,job_action=/home/usr/dba/rman/report_failure.sh,start_date=SYSTIMESTAMP,event_condition=tab.user_data.object_owner=,HR and tab
9、user_data.object_name=DATA.TXT,and tab.user_data.event_type=FILE_ARRIVAL,and tab.user_data.event_timestamp HR.LOAD_JOB_EVENT_Q);,END;,event_condition=,tab.user_data.object_owner=,HR and tab.user_data.object_name=DATA.TXT,and tab.user_data.event_type=FILE_ARRIVAL,and tab.user_data.event_timestamp,HR
10、LOAD_JOB_EVENT_Q);,基于事件的调度,事件类型:,用户或应用程序生成的事件,调度程序生成的事件,由调度程序作业引发的事件:,JOB_STARTED,JOB_SCH_LIM_REACHED,JOB_SUCCEEDED,JOB_DISABLED,JOB_FAILED,JOB_CHAIN_STALLED,JOB_BROKEN,JOB_ALL_EVENTS,JOB_COMPLETED,JOB_RUN_COMPLETED,JOB_STOPPED,JOB_OVER_MAX_DUR,引发事件的示例:,DBMS_SCHEDULER.SET_ATTRIBUTE(hr.do_backup,rai
11、se_events,DBMS_SCHEDULER.JOB_FAILED);,创建复杂调度,INCLUDE,EXCLUDE,INTERSECT,创建作业链,1.,创建链对象。,2.,定义链步骤。,3.,定义链规则。,4.,启动链:,启用链。,创建指向链的作业。,作业,作业链,链的示例,BULK_LOAD_CHAIN,Do_bulk_load,作业,Load_data_evt,结束,Rebuild_indx,调度,Stop_when_ disk_full_evt,Run_reports,(,HR.GEN_REPORTS,),开始,1,2,5,3,4,相关性调度,1.创建链对象,1,2,3,4,5,
12、2.定义链步骤,DBMS_SCHEDULER.DEFINE_CHAIN_EVENT_STEP(,chain_name=bulk_load_chain,step_name =load_data_evt,event_condition=tab.user_data.object_owner=,HR and tab.user_data.object_name=,DATA.TXT and tab.user_data.event_type=,FILE_ARRIVAL,queue_spec=HR.LOAD_JOB_EVENT_Q);,DBMS_SCHEDULER.DEFINE_CHAIN_STEP(,cha
13、in_name=bulk_load_chain,step_name =do_bulk_load,program_name=hr.load_data_prog);,DBMS_SCHEDULER.DEFINE_CHAIN_STEP(,chain_name=bulk_load_chain,step_name =rebuild_indx,program_name=hr.rebuild_indexes);,1,2,3,3.定义链规则,4.启动链,BEGIN,DBMS_SCHEDULER.ENABLE(bulk_load_chain);,END;,/,BEGIN,DBMS_SCHEDULER.CREATE
14、JOB(,job_name =bulk_load_chain_job,job_type =CHAIN,job_action =bulk_load_chain,repeat_interval=freq=daily;byhour=7;,byminute=5;bysecond=0,enabled =TRUE);,END;,/,监视作业链,DBA|ALL|USER_SCHEDULER_CHAINS,DBA|ALL|USER_SCHEDULER_CHAIN_RULES,DBA|ALL|USER_SCHEDULER_CHAIN_STEPS,DBA|ALL|USER_SCHEDULER_RUNNING_CHAINS,小结,在本课中,您应该已经学会:,使用调度程序来简化管理任务,创建作业、程序和调度,监视作业执行,使用基于时间的或基于事件的调度来执行调度程序作业,练习 18 概览:使用调度程序自动执行任务,本练习包含以下主题:,创建可运行数据库之外的程序的作业,创建程序和调度,创建使用程序和调度的作业,创建轻量作业,监视作业运行情况,






