我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle 11g无法自动收集统计信息怎么办

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Oracle 11g无法自动收集统计信息怎么办

这篇文章给大家分享的是有关Oracle 11g无法自动收集统计信息怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

SQL> select client_name,task_name,operation_name,status from dba_autotask_task;   -- 查询dba_autotask_task视图根本没有结果返回。

no rows selected

SQL> select job_name,actual_start_date,status from (select * from dba_scheduler_job_run_details where job_name like 'ORA$AT_OS_OPT%' order by log_date desc ) where rownum <4;     --最近一次执行成功的自动收集统计信息的时间如下

JOB_NAME                     ACTUAL_START_DATE                        STATUS

---------------------------- ---------------------------------------- -------------

ORA$AT_OS_OPT_SY_2606        26-SEP-12 10.00.07.902100 PM PRC     SUCCEEDED

ORA$AT_OS_OPT_SY_2586        25-SEP-12 10.00.07.829792 PM PRC     SUCCEEDED

ORA$AT_OS_OPT_SY_2566        24-SEP-12 10.00.07.154019 PM PRC     SUCCEEDED

SQL> select WINDOW_NAME, WINDOW_NEXT_TIME , WINDOW_ACTIVE,OPTIMIZER_STATS from DBA_AUTOTASK_WINDOW_CLIENTS order by WINDOW_NEXT_TIME ; --各个窗口的状态也都一切正常。

WINDOW_NAME                    WINDOW_NEXT_TIME                      WINDO OPTIMIZE

------------------------------ ------------------------------------- ----- --------

TUESDAY_WINDOW                 30-JAN-18 10.00.00.000000 PM PRC      FALSE ENABLED

WEDNESDAY_WINDOW               31-JAN-18 10.00.00.000000 PM PRC      FALSE ENABLED

THURSDAY_WINDOW                01-FEB-18 10.00.00.000000 PM PRC      FALSE ENABLED

FRIDAY_WINDOW                  02-FEB-18 10.00.00.000000 PM PRC      FALSE ENABLED

SATURDAY_WINDOW                03-FEB-18 06.00.00.000000 AM PRC      FALSE ENABLED

SUNDAY_WINDOW                  04-FEB-18 06.00.00.000000 AM PRC      FALSE ENABLED

MONDAY_WINDOW                  05-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 from DBA_AUTOTASK_WINDOW_CLIENTS--自动调用窗口也是正常的。

WINDOW_NAME                    AUTOTASK

------------------------------ --------

MONDAY_WINDOW                  ENABLED

TUESDAY_WINDOW                 ENABLED

WEDNESDAY_WINDOW               ENABLED

THURSDAY_WINDOW                ENABLED

FRIDAY_WINDOW                  ENABLED

SATURDAY_WINDOW                ENABLED

SUNDAY_WINDOW                  ENABLED

至此,问题较为清晰。11g中我的自动收集统计信息的相关设置都正常,但为什么不会自动收集统计信息了呢?也就是说为什么查询dba_autotask_task这个视图没有task在执行呢?

最后,通过各方求助终于解决了问题。原因如下:

SQL> select window_name,active from DBA_SCHEDULER_WINDOWS;

WINDOW_NAME                    ACTIV

------------------------------ -----

MONDAY_WINDOW                  FALSE

TUESDAY_WINDOW                 FALSE

WEDNESDAY_WINDOW               FALSE

THURSDAY_WINDOW                TRUE

FRIDAY_WINDOW                  FALSE

SATURDAY_WINDOW                FALSE

SUNDAY_WINDOW                  FALSE

WEEKNIGHT_WINDOW               FALSE

WEEKEND_WINDOW                 FALSE

正常来说所有的窗口都应该是 false的状态。但是 我们现有有一个是true,或许有可能是因为这个原因。这个窗口是周四的窗口,然后找一下最近一次自动收集统计信息的时间。

SQL> select job_name,actual_start_date,status from (select * from dba_scheduler_job_run_details where job_name like 'ORA$AT_OS_OPT%' order by log_date desc ) where rownum <4;

JOB_NAME                     ACTUAL_START_DATE                        STATUS

---------------------------- ---------------------------------------- -------------

ORA$AT_OS_OPT_SY_2606        26-SEP-12 10.00.07.902100 PM PRC     SUCCEEDED

ORA$AT_OS_OPT_SY_2586        25-SEP-12 10.00.07.829792 PM PRC     SUCCEEDED

ORA$AT_OS_OPT_SY_2566        24-SEP-12 10.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_WINDOW                  FALSE

TUESDAY_WINDOW                 FALSE

WEDNESDAY_WINDOW               FALSE

THURSDAY_WINDOW                FALSE

FRIDAY_WINDOW                  FALSE

SATURDAY_WINDOW                FALSE

SUNDAY_WINDOW                  FALSE

WEEKNIGHT_WINDOW               FALSE

WEEKEND_WINDOW                 FALSE

都变为flase了。

今天是周一。现在将周一的收集统计信息的时间变更一下。

SQL> select WINDOW_NAME, WINDOW_NEXT_TIME , WINDOW_ACTIVE,OPTIMIZER_STATS from DBA_AUTOTASK_WINDOW_CLIENTS order by WINDOW_NEXT_TIME ;

WINDOW_NAME                    WINDOW_NEXT_TIME                       WINDO OPTIMIZE

------------------------------ -------------------------------------- ----- --------

MONDAY_WINDOW                  29-JAN-18 10.00.00.000000 PM PRC       FALSE ENABLED

TUESDAY_WINDOW                 30-JAN-18 10.00.00.000000 PM PRC       FALSE ENABLED

WEDNESDAY_WINDOW               31-JAN-18 10.00.00.000000 PM PRC       FALSE ENABLED

THURSDAY_WINDOW                01-FEB-18 10.00.00.000000 PM PRC       FALSE ENABLED

FRIDAY_WINDOW                  02-FEB-18 10.00.00.000000 PM PRC       FALSE ENABLED

SATURDAY_WINDOW                03-FEB-18 06.00.00.000000 AM PRC       FALSE ENABLED

SUNDAY_WINDOW                  04-FEB-18 06.00.00.000000 AM PRC       FALSE ENABLED

7 rows selected.

修改自动收集时间窗口。

SQL> begin

  2  dbms_scheduler.disable( name => '"SYS"."MONDAY_WINDOW"', force => true);

  3  end;

  4  /

PL/SQL procedure successfully completed.

SQL> begin

  2  dbms_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

  2  dbms_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 from DBA_AUTOTASK_WINDOW_CLIENTS order by WINDOW_NEXT_TIME ;

WINDOW_NAME                    WINDOW_NEXT_TIME                        WINDO OPTIMIZE

------------------------------ --------------------------------------- ----- --------

MONDAY_WINDOW                  29-JAN-18 03.00.00.000000 PM PRC        FALSE ENABLED

TUESDAY_WINDOW                 30-JAN-18 10.00.00.000000 PM PRC        FALSE ENABLED

WEDNESDAY_WINDOW               31-JAN-18 10.00.00.000000 PM PRC        FALSE ENABLED

THURSDAY_WINDOW                01-FEB-18 10.00.00.000000 PM PRC        FALSE ENABLED

FRIDAY_WINDOW                  02-FEB-18 10.00.00.000000 PM PRC        FALSE ENABLED

SATURDAY_WINDOW                03-FEB-18 06.00.00.000000 AM PRC        FALSE ENABLED

SUNDAY_WINDOW                  04-FEB-18 06.00.00.000000 AM PRC        FALSE ENABLED

7 rows selected.

跑完之后再次查询。

SQL> select job_name,actual_start_date,status from (select * from dba_scheduler_job_run_details where job_name like 'ORA$AT_OS_OPT%' order by log_date desc ) where rownum <4;

JOB_NAME                     ACTUAL_START_DATE                          STATUS

---------------------------- ------------------------------------------ --------------

ORA$AT_OS_OPT_SY_2626        29-JAN-18 03.00.00.732062 PM PRC       STOPPED

ORA$AT_OS_OPT_SY_2606        26-SEP-12 10.00.07.902100 PM PRC           SUCCEEDED

ORA$AT_OS_OPT_SY_2586        25-SEP-12 10.00.07.829792 PM PRC           SUCCEEDED

果然,是因为这个窗口的问题。这个DBA_SCHEDULER_WINDOWS 正常的状态应该是false的状态,当系统调用时变为true的状态,现在因为数据库不正常关闭,导致了这个窗口并没有改变过来。所以数据库所有的收集作业都断了。

再次查询 :

SQL> select client_name,task_name,operation_name,status from dba_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                    auto space 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无法自动收集统计信息怎么办”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle 11g无法自动收集统计信息怎么办

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

oracle统计信息收集的方法是什么

Oracle数据库中对表的统计信息可以通过以下方法进行收集:自动统计信息收集:Oracle数据库会自动收集表的统计信息,以便优化查询计划。可以通过设置参数 AUTOSTATS_TARGET 来控制自动收集统计信息的目标。手动收集统计信息:可
oracle统计信息收集的方法是什么
2024-04-09

windows收集错误信息后无法启动怎么解决

如果Windows收集错误信息后无法启动,可以尝试以下方法进行解决:尝试使用"安全模式"启动:按下电源按钮并立即重启计算机,然后按F8键多次,直到出现高级启动选项。选择"安全模式"启动,并查看是否能够成功进入Windows。进行系统恢复:如
windows收集错误信息后无法启动怎么解决
2024-02-29

编程热搜

目录