昨天讲了关于scheduler的参数的设置详解,今天来看一下对于急于scheduler的job的设置的详解,首先还是来看一下基本的创建脚本:
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_name:job的所属用户及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:是否在job为completed之后自动drop掉
enabled:是否生效
还有一些参数在job创建的时候并不能进行设置,下面进行说明:
raise_events:job会触发的一些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 :JOB被STOP_JOB过程置为停止执行的状态;
l job_sch_lim_reached :Job的schedule达到限定值;
l job_disabled :JOB被置于DISABLE状态;
l job_chain_stalled :运行于chain的JOB被置于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_runs:job执行的最大次数,范围1到1000000,默认为空(即意味着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:在同一个class,job执行的优先级,默认为3。范围从1到5。
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);