近日,由于系统需求,周一到周五的自动统计信息收集与业务冲突,所以决定修改统计信息的自动收集时间,停止周一到周四的收集,仅仅保留周五六日的。

   其实修改的方法简单,无非就是直接调整统计信息收集的job执行时间或调整调用该jo的window的时间。但是为安全直观期间,我还是使用EM control来完成修改,并将脚本记录如下。(注意版本是11.2.0.3的,10G版本的自动收集job和11G是不同的)

   首先查询一下当前window的执行时间信息


  
  1. select * from DBA_SCHEDULER_WINDOWS  

   更改window的执行时间


  
  1. BEGIN 
  2. DBMS_SCHEDULER.SET_ATTRIBUTE( 
  3. name=>'"SYS"."WEEKEND_WINDOW"', 
  4. attribute=>'RESOURCE_PLAN', 
  5. value=>'ETL_CRITICAL_PLAN');                                             <<<<<<<<<<<<<<< 这里设定资源管理计划 
  6. END; 
  7.  
  8.  
  9. BEGIN 
  10. DBMS_SCHEDULER.SET_ATTRIBUTE( 
  11. name=>'"SYS"."WEEKEND_WINDOW"', 
  12. attribute=>'REPEAT_INTERVAL', 
  13. value=>'FREQ=WEEKLY;BYDAY=FRI,SAT,SUN;BYHOUR=1;BYMINUTE=0;BYSECOND=0');       <<<<<<<<<<<<<<<这里标示,window执行的时间 
  14. END; 

   加入job到window


  
  1. BEGIN 
  2. sys.dbms_scheduler.disable( '"ORACLE_OCM"."MGMT_STATS_CONFIG_JOB"' ); 
  3. sys.dbms_scheduler.set_attribute( name => '"ORACLE_OCM"."MGMT_STATS_CONFIG_JOB"', attribute => 'job_action', value => '"ORACLE_OCM"."MGMT_CONFIG"."COLLECT_STATS"'); 
  4. sys.dbms_scheduler.set_attribute_null( name => '"ORACLE_OCM"."MGMT_STATS_CONFIG_JOB"', attribute => 'start_date'); 
  5. sys.dbms_scheduler.set_attribute_null( name => '"ORACLE_OCM"."MGMT_STATS_CONFIG_JOB"', attribute => 'repeat_interval'); 
  6. sys.dbms_scheduler.set_attribute_null( name => '"ORACLE_OCM"."MGMT_STATS_CONFIG_JOB"', attribute => 'end_date'); 
  7. sys.dbms_scheduler.set_attribute( name => '"ORACLE_OCM"."MGMT_STATS_CONFIG_JOB"', attribute => 'schedule_name', value => '"SYS"."WEEKEND_WINDOW"');                                                                                              <<<<<<<<<<<<<<< 将该job加入到指定的window中 
  8. sys.dbms_scheduler.enable( '"ORACLE_OCM"."MGMT_STATS_CONFIG_JOB"' ); 
  9. END; 

再次查询一下window目前的执行时间,看修改的结果


  
  1. select * from DBA_SCHEDULER_WINDOWS