Oracle 11g无法自动收集统计信息怎么办
这篇文章给大家分享的是有关Oracle 11g无法自动收集统计信息怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
SQL> select client_name,task_name,operation_name,status fromdba_autotask_task;-- 查询dba_autotask_task视图根本没有结果返回。
no rows selected
SQL> select job_name,actual_start_date,status from (select * fromdba_scheduler_job_run_details where job_name like 'ORA$AT_OS_OPT%' order bylog_date desc ) where rownum <4; --最近一次执行成功的自动收集统计信息的时间如下
JOB_NAME ACTUAL_START_DATE STATUS
---------------------------- ---------------------------------------- -------------
ORA$AT_OS_OPT_SY_260626-SEP-12 10.00.07.902100 PM PRC SUCCEEDED
ORA$AT_OS_OPT_SY_258625-SEP-1210.00.07.829792 PM PRC SUCCEEDED
ORA$AT_OS_OPT_SY_256624-SEP-1210.00.07.154019 PM PRC SUCCEEDED
SQL> select WINDOW_NAME, WINDOW_NEXT_TIME ,WINDOW_ACTIVE,OPTIMIZER_STATS from DBA_AUTOTASK_WINDOW_CLIENTS order byWINDOW_NEXT_TIME ; --各个窗口的状态也都一切正常。
WINDOW_NAMEWINDOW_NEXT_TIME WINDO OPTIMIZE
------------------------------------------------------------------- ----- --------
TUESDAY_WINDOW30-JAN-18 10.00.00.000000 PM PRC FALSE ENABLED
WEDNESDAY_WINDOW31-JAN-18 10.00.00.000000 PM PRC FALSE ENABLED
THURSDAY_WINDOW01-FEB-18 10.00.00.000000 PM PRC FALSE ENABLED
FRIDAY_WINDOW02-FEB-18 10.00.00.000000 PM PRC FALSE ENABLED
SATURDAY_WINDOW03-FEB-18 06.00.00.000000 AM PRC FALSE ENABLED
SUNDAY_WINDOW 04-FEB-18 06.00.00.000000 AM PRC FALSE ENABLED
MONDAY_WINDOW05-FEB-18 03.00.00.000000 PM PRC FALSE ENABLED
SQL> select client_name,status from dba_autotask_client; --奇怪的是查询这个视图,确实是自动打开收集统计信息的设置。
CLIENT_NAME STATUS
--------------------------------------- --------
auto optimizer stats collection ENABLED
auto space advisor ENABLED
sql tuning advisor ENABLED
SQL> select window_name,autotask_status fromDBA_AUTOTASK_WINDOW_CLIENTS;--自动调用窗口也是正常的。
WINDOW_NAMEAUTOTASK
------------------------------ --------
MONDAY_WINDOWENABLED
TUESDAY_WINDOWENABLED
WEDNESDAY_WINDOWENABLED
THURSDAY_WINDOWENABLED
FRIDAY_WINDOW ENABLED
SATURDAY_WINDOWENABLED
SUNDAY_WINDOWENABLED
至此,问题较为清晰。11g中我的自动收集统计信息的相关设置都正常,但为什么不会自动收集统计信息了呢?也就是说为什么查询dba_autotask_task这个视图没有task在执行呢?
最后,通过各方求助终于解决了问题。原因如下:
SQL> select window_name,active from DBA_SCHEDULER_WINDOWS;
WINDOW_NAMEACTIV
------------------------------ -----
MONDAY_WINDOWFALSE
TUESDAY_WINDOWFALSE
WEDNESDAY_WINDOWFALSE
THURSDAY_WINDOW TRUE
FRIDAY_WINDOWFALSE
SATURDAY_WINDOWFALSE
SUNDAY_WINDOWFALSE
WEEKNIGHT_WINDOWFALSE
WEEKEND_WINDOWFALSE
正常来说所有的窗口都应该是 false的状态。但是 我们现有有一个是true,或许有可能是因为这个原因。这个窗口是周四的窗口,然后找一下最近一次自动收集统计信息的时间。
SQL> select job_name,actual_start_date,status from (select * fromdba_scheduler_job_run_details where job_name like 'ORA$AT_OS_OPT%' order bylog_date desc ) where rownum <4;
JOB_NAME ACTUAL_START_DATE STATUS
---------------------------- -----------------------------------------------------
ORA$AT_OS_OPT_SY_260626-SEP-12 10.00.07.902100 PM PRC SUCCEEDED
ORA$AT_OS_OPT_SY_2586 25-SEP-1210.00.07.829792 PM PRC SUCCEEDED
ORA$AT_OS_OPT_SY_256624-SEP-1210.00.07.154019 PM PRC SUCCEEDED
发现是12年9月26号。查询了一下万年历。26号正好是周三。而周四变成了true,可能是因为在收集统计信息的时候数据库不正常关闭导致的吧!现在将这个true改变为false。
这里注意,如果你的生产环境很久很久没有自动收集统计信息了的状态下,请先在测试环境收集统计信息最好做个spa报告,不然很有可能影响生产。
SQL> EXECUTE DBMS_SCHEDULER.CLOSE_WINDOW ('THURSDAY_WINDOW');
再次查询
SQL> select window_name,active from DBA_SCHEDULER_WINDOWS;
WINDOW_NAME ACTIV
------------------------------ -----
MONDAY_WINDOWFALSE
TUESDAY_WINDOWFALSE
WEDNESDAY_WINDOWFALSE
THURSDAY_WINDOW FALSE
FRIDAY_WINDOWFALSE
SATURDAY_WINDOWFALSE
SUNDAY_WINDOWFALSE
WEEKNIGHT_WINDOWFALSE
WEEKEND_WINDOWFALSE
都变为flase了。
今天是周一。现在将周一的收集统计信息的时间变更一下。
SQL> select WINDOW_NAME, WINDOW_NEXT_TIME ,WINDOW_ACTIVE,OPTIMIZER_STATS from DBA_AUTOTASK_WINDOW_CLIENTS order byWINDOW_NEXT_TIME ;
WINDOW_NAMEWINDOW_NEXT_TIME WINDO OPTIMIZE
-------------------------------------------------------------------- ----- --------
MONDAY_WINDOW29-JAN-18 10.00.00.000000 PM PRC FALSE ENABLED
TUESDAY_WINDOW30-JAN-18 10.00.00.000000 PM PRC FALSE ENABLED
WEDNESDAY_WINDOW31-JAN-18 10.00.00.000000 PM PRC FALSE ENABLED
THURSDAY_WINDOW01-FEB-18 10.00.00.000000 PM PRC FALSE ENABLED
FRIDAY_WINDOW02-FEB-18 10.00.00.000000 PM PRC FALSE ENABLED
SATURDAY_WINDOW03-FEB-18 06.00.00.000000 AM PRC FALSEENABLED
SUNDAY_WINDOW04-FEB-18 06.00.00.000000 AM PRC FALSE ENABLED
7 rows selected.
修改自动收集时间窗口。
SQL> begin
2dbms_scheduler.disable( name =>'"SYS"."MONDAY_WINDOW"', force => true);
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> begin
2dbms_scheduler.set_attribute( name=>'"SYS"."MONDAY_WINDOW"',attribute =>'repeat_interval',value=>'freq=daily;byday=mon;byhour=15;byminute=0;bysecond=0');
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> begin
2dbms_scheduler.enable( name =>'"SYS"."MONDAY_WINDOW"');
3 end;
4 /
PL/SQL procedure successfully completed.
修改成功
SQL> select WINDOW_NAME,WINDOW_NEXT_TIME , WINDOW_ACTIVE,OPTIMIZER_STATS fromDBA_AUTOTASK_WINDOW_CLIENTS order by WINDOW_NEXT_TIME ;
WINDOW_NAMEWINDOW_NEXT_TIME WINDO OPTIMIZE
--------------------------------------------------------------------- ----- --------
MONDAY_WINDOW29-JAN-18 03.00.00.000000 PM PRC FALSE ENABLED
TUESDAY_WINDOW30-JAN-18 10.00.00.000000 PM PRC FALSE ENABLED
WEDNESDAY_WINDOW31-JAN-18 10.00.00.000000 PM PRC FALSE ENABLED
THURSDAY_WINDOW01-FEB-18 10.00.00.000000 PM PRC FALSE ENABLED
FRIDAY_WINDOW02-FEB-18 10.00.00.000000 PM PRC FALSE ENABLED
SATURDAY_WINDOW03-FEB-18 06.00.00.000000 AM PRC FALSEENABLED
SUNDAY_WINDOW04-FEB-18 06.00.00.000000 AM PRC FALSE ENABLED
7 rows selected.
跑完之后再次查询。
SQL> select job_name,actual_start_date,status from (select * fromdba_scheduler_job_run_details where job_name like 'ORA$AT_OS_OPT%' order bylog_date desc ) where rownum <4;
JOB_NAME ACTUAL_START_DATE STATUS
---------------------------- ------------------------------------------ --------------
ORA$AT_OS_OPT_SY_262629-JAN-1803.00.00.732062 PM PRC STOPPED
ORA$AT_OS_OPT_SY_2606 26-SEP-1210.00.07.902100 PM PRC SUCCEEDED
ORA$AT_OS_OPT_SY_2586 25-SEP-1210.00.07.829792 PM PRC SUCCEEDED
果然,是因为这个窗口的问题。这个DBA_SCHEDULER_WINDOWS 正常的状态应该是false的状态,当系统调用时变为true的状态,现在因为数据库不正常关闭,导致了这个窗口并没有改变过来。所以数据库所有的收集作业都断了。
再次查询:
SQL> select client_name,task_name,operation_name,status fromdba_autotask_task;
CLIENT_NAME TASK_NAME OPERATION_NAME STATUS
--------------------------------- ----------------------------------------------------------------------------- --------
sql tuning advisor AUTO_SQL_TUNING_PROG automatic sql tuning task ENABLED
auto space advisor auto_space_advisor_prog autospace advisor job ENABLED
auto optimizer stats collection gather_stats_prog auto optimizer stats job ENABLED
通过在网上查询相关资料【http://blog.itpub.net/235507/viewspace-1137629/】,写到Oracle 11g统计信息自动收集任务运行任务调用的流程:
1、首先是dba_autotask_task-->dba_autotask_client建立自动执行任务
2、再根据时间窗口及资源组建立自动执行作业
dba_autotask_client-->dba_scheduler_window_groups-->dba_scheduler_windows-->dba_scheduler_jobs
dba_autotask_client-->dba_scheduler_job_classes
感谢各位的阅读!关于“Oracle 11g无法自动收集统计信息怎么办”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。