Oracle 11g 建立臨時window時間視窗 收集統計資訊

shytodear發表於2016-01-08
1、需求:
Oracle 11g統計資訊自動收集預設22點開啟,現想在白天臨時開啟(且不讓其他job執行)。

2、具體操作
1) broken job
conn CTI/123456
select 'exec dbms_job.broken('||job||',true);' from dba_jobs;
select job,broken from dba_jobs;

2)開啟job引數
alter system set job_queue_processes=100 scope=both sid='*';

3)create window,
    時間:17:00開始,並加入組MAINTENANCE_WINDOW_GROUP
BEGIN
dbms_scheduler.create_window(
    window_name     => 'TEMP_STAT_WINDOW',
    duration        =>  numtodsinterval(8, 'hour'),
    resource_plan   => 'DEFAULT_MAINTENANCE_PLAN',
    repeat_interval => 'FREQ=DAILY;BYHOUR=17;BYMINUTE=00;BYSECOND=0');
END;
/
BEGIN
dbms_scheduler.add_window_group_member(
    group_name  => 'MAINTENANCE_WINDOW_GROUP',
    window_list => 'TEMP_STAT_WINDOW');
END;
/

4) 監控進度
--檢視進度
select count(*) from dba_tables where LAST_ANALYZED is not null;
select owner,table_name,rownum,LAST_ANALYZED from dba_tables order by LAST_ANALYZED;

--檢視window是否active
select a.window_name,a.next_start_date,a.active from dba_scheduler_windows a
    inner join dba_scheduler_wingroup_members b on a.window_name = b.window_name
    where b.window_group_name='ORA$AT_WGRP_OS';

--統計資訊歷史執行情況
col client_name       for a35
col window_name       for a20
col window_start_time for a30
col window_duration   for a30
col window_end_time   for a20
set linesize 200
select client_name,window_name,window_start_time,window_duration,window_end_time 
from dba_autotask_client_history where client_name like '%stats%'; 

--大分割槽表
select table_name,partition_name,num_rows from dba_TAB_PARTITIONS where table_name='TF_USER';
select count(*) from cti.tf_user partition(PART_USER_0013);


5) 刪除臨時window
--從window組中移除
BEGIN
DBMS_SCHEDULER.REMOVE_WINDOW_GROUP_MEMBER(
    group_name  => 'MAINTENANCE_WINDOW_GROUP',
    window_list => 'TEMP_STAT_WINDOW');
END;
/

--drop window
SQL> exec dbms_scheduler.drop_window('sys.TEMP_STAT_WINDOW');

注:執行drop_window報錯:
exec dbms_scheduler.drop_window('sys.TEMP_STAT_WINDOW');
ORA-27480: window "TEMP_STAT_WINDOW" is currently open

解決辦法:
exec dbms_scheduler.close_window('sys.TEMP_STAT_WINDOW');
exec dbms_scheduler.drop_window('sys.TEMP_STAT_WINDOW',TRUE);

注:也可採用下面方法直接收集資料庫統計資訊,效果一樣
exec dbms_stats.gather_database_stats(options=>'gather auto'); 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27126919/viewspace-1973958/,如需轉載,請註明出處,否則將追究法律責任。

相關文章