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

63次阅读
没有评论

共计 6804 个字符,预计需要花费 18 分钟才能阅读完成。

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

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    – 最近一次执行成功的自动收集统计信息的时间如下

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

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

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计6804字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)