【Oracle】基于SCHEDULER的job的详解

来源:互联网 发布:淘宝女装长袖短装 编辑:程序博客网 时间:2024/05/19 21:41

昨天讲了关于scheduler的参数的设置详解,今天来看一下对于急于schedulerjob的设置的详解,首先还是来看一下基本的创建脚本:

sys.dbms_scheduler.create_job(

job_name => '"SYS"."REBUILD_JOB1"',

program_name => '"SYS"."EMP_IND_REBUILD"',

schedule_name => '"SYS"."DAILYREBUILD"',

job_class => '"DEFAULT_JOB_CLASS"',

comments => 'rebuild',

Auto_drop => TRUE,

enabled => TURE);

 

job_namejob的所属用户及job的名字

program_name:这个job调用的program的名字

schedule_name:这个job使用的scheduler的名字

job_class:这个job所在的job class的名字

注:Job Class 相当于创建了一个job 组,DBA 可以将那些具有相同特性的job,统统放到相同的Job Classes中,然后通过对Job Class 应用ORACLE 中的"资源使用计划"特性,就可以对这些job 执行过程中所需要的资源分配情况进行管理。

comments:对于这个job的描述

auto_drop:是否在jobcompleted之后自动drop

enabled:是否生效

 

还有一些参数在job创建的时候并不能进行设置,下面进行说明:

raise_eventsjob会触发的一些event,默认是不会触发event的,不过可以在job创建后进行修改。

l job_started JOB启动;

l job_succeeded JOB成功结束;

l job_failed JOB执行失败;

l job_broken JOB被置为BROKEN状态;

l job_completed JOB达到最大运行次数,或者运行的结束日期;

l job_stopped JOBSTOP_JOB过程置为停止执行的状态;

l job_sch_lim_reached Jobschedule达到限定值;

l job_disabled JOB被置于DISABLE状态;

l job_chain_stalled :运行于chainJOB被置于CHAIN_STALLED状态;

l job_all_events :含上述提到的所有类型;

l job_run_completed :由于Job运行出错、成功结束或被手动停止。

其修改的方式如下所示:

sys.dbms_scheduler.set_attribute( name => '"SYS"."REBUILD_JOB1"', attribute => 'raise_events', value => dbms_scheduler.job_started + dbms_scheduler.job_succeeded + dbms_scheduler.job_failed + dbms_scheduler.job_broken + dbms_scheduler.job_completed + dbms_scheduler.job_stopped + dbms_scheduler.job_sch_lim_reached + dbms_scheduler.job_disabled + dbms_scheduler.job_chain_stalled);

 

 

restartable:在job执行失败的时候是否进行自动重新执行。

sys.dbms_scheduler.set_attribute( name => '"SYS"."REBUILD_JOB1"', attribute => 'restartable', value => TRUE);

 

 

schedule_limit:允许job的最大延迟时间,如果系统的负载很重,在到了schedule设置的运行时间时无法取得相应的资源去执行job,这时候如果schedule的设置为null的时候,job会在取得资源之后再执行,无论等多长时间都会等待执行。而如果设置了schedule_limit设置之后如果超过设置值则job这次执行会跳过。此次执行不会定义为执行失败,在job log中会有反应。其取值范围由1分钟到99

sys.dbms_scheduler.set_attribute( name => '"SYS"."REBUILD_JOB1"', attribute => 'schedule_limit', value => numtodsinterval(20, 'minute'));

 

 

max_run_duration设置job运行的有效时间,如果设置了某个值,则在到达该值时调度会报JOB_OVER_MAX_DUR事件,然后由事件处理器决定是否要继续

sys.dbms_scheduler.set_attribute( name => '"SYS"."REBUILD_JOB1"', attribute => 'max_run_duration', value => numtodsinterval(10, 'minute'));

 

max_runsjob执行的最大次数,范围11000000,默认为空(即意味着job会重复执行,或者到达job执行的end_date,或者达到指定失败的次数)。一旦达到设置的最大值,job将会disable并且状态变更为COMPLETED

sys.dbms_scheduler.set_attribute( name => '"SYS"."REBUILD_JOB1"', attribute => 'max_runs', value => 10);

 

instance_stickiness只用于rac数据库。默认为true,设置为true,则job会运行在负载最轻的节点上;如果某节点关闭或负载太重,则不会启动新job,而是有另一个节点来执行该job

 

job_priority在同一个classjob执行的优先级,默认为3。范围从15

sys.dbms_scheduler.set_attribute( name => '"SYS"."REBUILD_JOB1"', attribute => 'job_priority', value => 2);

 

 

max_failures允许job失败的次数,范围1到1000000,默认为空。

sys.dbms_scheduler.set_attribute( name => '"SYS"."REBUILD_JOB1"', attribute => 'max_failures', value => 5);

 

job_weight:如果使用了并行执行技术,这个参数可以设置job中执行sql的并行度。

sys.dbms_scheduler.set_attribute( name => '"SYS"."REBUILD_JOB1"', attribute => 'job_weight', value => 5);

 

 

 

5 0
原创粉丝点击