禁用11g的統計資料自動收集功能
資料庫報錯
GATHER_STATS_JOB encountered errors. Check the trace file.
Errors in file /opt/oracle/diag/rdbms/dbserver1/dbserver1/trace/dbserver1_j003_10544.trc:
ORA-20011: Approximate NDV failed: ORA-01476: divisor is equal to zero
環境
ORACLE 11G R2
REDHAT 5.3 FOR 64 BIT
解決
網上給出的結論是BUG。
Bug No: 6040840
Filed 09-MAY-2007 Updated 10-MAY-2007
Product Oracle Server - Enterprise Edition Product Version 9.2.0.8
Platform. AIX5L Based Systems (64-bit) Platform. Version No Data
Database Version 9.2.0.8 Affects Platforms Generic
Severity Severe Loss of Service Status Duplicate Bug. To Filer
Base Bug 5645718 Fixed in Product Version No Data
Problem statement:
DBMS_STATS.GATHER_TABLE_STATS FAILS WITH ORA-1476.
WORKAROUND: ----------- n/a . RELATED BUGS: ------------- Bug#5645718.
不過我的資料庫版本是11G,應該不是這個BUG。
檢查日誌發現:
*** 2012-09-29 06:00:16.870
GATHER_STATS_JOB: GATHER_TABLE_STATS('"MIS"','"T_SALES_ORDER_ITEM"','""', ...)
ORA-20011: Approximate NDV failed: ORA-01476: divisor is equal to zero
檢查T_SALES_ORDER_ITEM表發現該表select的時候也報錯:
ORA-01476: divisor is equal to zero
檢視錶結構:
CREATE TABLE T_SALES_ORDER_ITEM
(
ID NUMBER(18) NOT NULL,
......
PREPAY_RATE NUMBER GENERATED ALWAYS AS (ROUND(TO_NUMBER(TO_CHAR("PREPAYMONEY"))*100/("PRICE"*"QUANTITY"),2))
......
最後 select price,quantity from T_SALES_ORDER_ITEM發現price有等於0的值!!!問題並不難解決,發現問題才是至關重要的。
修改PREPAY_RATE列,新增decode判斷函式:
PREPAY_RATE NUMBER GENERATED ALWAYS AS (DECODE("PRICE",0,0,ROUND(TO_NUMBER(TO_CHAR("PREPAYMONEY"))*100/("PRICE"*"QUANTITY"),2)))
補充知識:
查詢問題過程中曾經懷疑是自動收集統計資訊的問題。和BUG 6040840很相似,但是我的資料庫是11g r2,所以排除了BUG 6040840的可能性。
手工停止自動收集統計資訊任務
在Oracle的11g版本中提供了統計資料自動收集的功能。在部署安裝11g Oracle軟體過程中,其中有一個步驟便是提示是否啟用這個功能(預設是啟用這個功能)。這個功能貌似帶來了統計資料採集上的便捷,但是其中卻隱藏著效能隱患。在7*24小時的系統中這種自動執行的任務很有可能對系統效能帶來衝擊。
1、檢視自動收集統計資訊的任務及狀態
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
其中“auto optimizer stats collection”便是我們要尋找的自動收集統計資訊的任務名稱,它的狀態目前是啟用狀態。
2、禁止自動收集統計資訊的任務
使用DBMS_AUTO_TASK_ADMIN包完成這個任務。
SQL> exec DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto optimizer stats collection',operation => NULL,window_name => NULL);
PL/SQL procedure successfully completed.
SQL> select client_name,status from dba_autotask_client;
CLIENT_NAME STATUS
------------------------------------- --------
auto optimizer stats collection DISABLED
auto space advisor ENABLED
sql tuning advisor ENABLED
此時“auto optimizer stats collection”任務已經被禁用,目的達到。
3、啟用自動收集統計資訊的任務
SQL> exec DBMS_AUTO_TASK_ADMIN.ENABLE(client_name => 'auto optimizer stats collection',operation => NULL,window_name => NULL);
PL/SQL procedure successfully completed.
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
10g和11g對比
10g中檢視收集統計資訊作業的方法
SQL> col JOB_NAME for a16
SQL> col PROGRAM_NAME for a18
SQL> col SCHEDULE_NAME for a20
SQL> col SCHEDULE_NAME for a24
SQL> col JOB_CLASS for a20
SQL> select job_name, program_name, schedule_name, job_class from dba_scheduler_jobs where job_name = 'GATHER_STATS_JOB';
JOB_NAME PROGRAM_NAME SCHEDULE_NAME JOB_CLASS
---------------- ------------------ ------------------------ --------------------
GATHER_STATS_JOB GATHER_STATS_PROG MAINTENANCE_WINDOW_GROUP AUTO_TASKS_JOB_CLASS
11g中檢視收集統計資訊作業的方法
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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/751371/viewspace-745410/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Statistics】禁用11g的統計資料自動收集功能
- 禁用oracle 11g 的統計資料自動功能Oracle
- 【Statistics】禁用10g的統計資料自動收集功能
- ORACLE 11g 自動收集統計資訊Oracle
- 【Oracle】11g Oracle自動收集統計資訊Oracle
- Oracle 11g 之自動收集統計資訊Oracle
- Oracle 11g無法自動收集統計資訊Oracle
- oracle 11g自動收集統計資訊介紹Oracle
- oracle10g如何啟用禁用自動統計資訊收集Oracle
- [統計資訊系列7] Oracle 11g的自動統計資訊收集Oracle
- Oracle 11g 修改表級別的自動收集統計資訊比率Oracle
- 開啟oracle10g統計資訊自動收集功能Oracle
- Oracle統計資訊自動收集Oracle
- Oracle 11g系統自動收集統計資訊的一些知識Oracle
- ORACLE 11G 自動收集Oracle
- 關於oracle自動收集統計資訊Oracle
- Oracle10g 統計資訊的自動收集Oracle
- 關閉及開啟oracle10g統計資訊自動收集功能Oracle
- 關閉及開啟oracle10g統計資訊自動收集功能(轉)Oracle
- oracle 11g統計資訊收集Oracle
- [zt] Oracle10g 自動收集收集CBO統計資訊設定Oracle
- 關閉特定物件統計資訊自動收集物件
- ORACLE10g自動收集CBO統計資訊Oracle
- 優化器統計自動收集的一點總結優化
- 6 收集資料庫統計資訊資料庫
- Oracle的自動統計資訊不收集直方圖的資訊Oracle直方圖
- Oracle11g 統計資訊-----統計資訊自動收集任務Oracle
- Oracle11g 統計資訊——統計資訊自動收集任務Oracle
- 關於統計資料收集的總結
- oracle 統計資訊過期判斷和自動收集Oracle
- Win10系統禁用已計劃自動重啟的方法Win10
- Win10系統關閉“小娜自動收集個人資訊”功能的方法Win10
- Oracle 11g手工收集表統計資訊Oracle
- Oracle 11g 統計資訊收集指令碼Oracle指令碼
- DB2_收集表統計資料DB2
- 自動刪除過期的statspack統計資料
- 收集資料庫統計資訊需要收集直方圖資訊.資料庫直方圖
- UNIX下收集作業系統統計資料作業系統