select c..."/>
溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Oracle 11g無法自動收集統(tǒng)計信息怎么辦

發(fā)布時間:2021-11-11 14:13:36 來源:億速云 閱讀:162 作者:小新 欄目:關(guān)系型數(shù)據(jù)庫

這篇文章給大家分享的是有關(guān)Oracle 11g無法自動收集統(tǒng)計信息怎么辦的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

SQL> select client_name,task_name,operation_name,status from dba_autotask_task;   -- 查詢dba_autotask_task視圖根本沒有結(jié)果返回。

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;     --最近一次執(zhí)行成功的自動收集統(tǒng)計信息的時間如下

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 ; --各個窗口的狀態(tài)也都一切正常。

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;     --奇怪的是查詢這個視圖,確實是自動打開收集統(tǒng)計信息的設(shè)置。

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;--自動調(diào)用窗口也是正常的。

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中我的自動收集統(tǒng)計信息的相關(guān)設(shè)置都正常,但為什么不會自動收集統(tǒng)計信息了呢?也就是說為什么查詢dba_autotask_task這個視圖沒有task在執(zhí)行呢?

最后,通過各方求助終于解決了問題。原因如下:

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

正常來說所有的窗口都應(yīng)該是 false的狀態(tài)。但是 我們現(xiàn)有有一個是true,或許有可能是因為這個原因。這個窗口是周四的窗口,然后找一下最近一次自動收集統(tǒng)計信息的時間。

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

發(fā)現(xiàn)是12年9月26號。查詢了一下萬年歷。26號正好是周三。而周四變成了true,可能是因為在收集統(tǒng)計信息的時候數(shù)據(jù)庫不正常關(guān)閉導(dǎo)致的吧!現(xiàn)在將這個true改變?yōu)閒alse。

這里注意,如果你的生產(chǎn)環(huán)境很久很久沒有自動收集統(tǒng)計信息了的狀態(tài)下,請先在測試環(huán)境收集統(tǒng)計信息最好做個spa報告,不然很有可能影響生產(chǎn)。

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

都變?yōu)閒lase了。

今天是周一?,F(xiàn)在將周一的收集統(tǒng)計信息的時間變更一下。

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 正常的狀態(tài)應(yīng)該是false的狀態(tài),當(dāng)系統(tǒng)調(diào)用時變?yōu)閠rue的狀態(tài),現(xiàn)在因為數(shù)據(jù)庫不正常關(guān)閉,導(dǎo)致了這個窗口并沒有改變過來。所以數(shù)據(jù)庫所有的收集作業(yè)都斷了。

再次查詢 :

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

通過在網(wǎng)上查詢相關(guān)資料【http://blog.itpub.net/235507/viewspace-1137629/】,寫到Oracle 11g統(tǒng)計信息自動收集任務(wù)運行任務(wù)調(diào)用的流程:

1、首先是dba_autotask_task-->dba_autotask_client建立自動執(zhí)行任務(wù)

2、再根據(jù)時間窗口及資源組建立自動執(zhí)行作業(yè)

dba_autotask_client-->dba_scheduler_window_groups-->dba_scheduler_windows-->dba_scheduler_jobs

dba_autotask_client-->dba_scheduler_job_classes

感謝各位的閱讀!關(guān)于“Oracle 11g無法自動收集統(tǒng)計信息怎么辦”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI