Oracle10g新增的檢視dba_tablespace_usage_metrics

xz43發表於2011-02-22

DBA_TABLESPACE_USAGE_METRICS describes tablespace usage metrics for all types of tablespaces, including permanent, temporary, and undo tablespaces.

Column Datatype NULL Description
TABLESPACE_NAME VARCHAR2(30)   Tablespace name
USED_SPACE NUMBER   Total space consumed by the tablespace
TABLESPACE_SIZE NUMBER   Total size of the tablespace
USED_PERCENT NUMBER   Percentage of used space, as a function of the maximum possible tablespace size

    以上是Oracle對該檢視的定義,本以為Oracle提供的檢視會很準,所以平時檢視錶空間的使用情況,為了圖方便,就直接檢視該檢視。
    今天一個偶然的機會,發現這個檢視是相當的不準確了。
    我用imp方式還原一個資料庫的時候,控制檯已經報錯:
ORA-01658: 無法為表空間 TEST_DB 中的段建立 INITIAL 區
這個錯誤明顯表示表空間的空間不夠了,可我檢視dba_tablespace_usage_metrics檢視,已用空間的比率確很低:
SQL> select * from dba_tablespace_usage_metrics;
TABLESPACE_NAME                USED_SPACE TABLESPACE_SIZE USED_PERCENT
------------------------------ ---------- --------------- ------------
TEST_DB                             255984         4194302 6.1031370654
這裡看到已用空間之佔了百分之六多點。
我再透過 DBA_DATA_FILE 和 DBA_FREE_SPACE 檢視檢視,結果如下:
 
SQL> SELECT D.TABLESPACE_NAME,
  2         FILE_NAME "FILE_NAME",
  3         SPACE "SUM_SPACE(M)",
  4         SPACE - NVL(FREE_SPACE, 0) "USED_SPACE(M)",
  5         ROUND((1 - NVL(FREE_SPACE, 0) / SPACE) * 100, 2) "USED_RATE(%)",
  6         AUTOEXTENSIBLE
  7    FROM (SELECT FILE_ID,
  8                 FILE_NAME,
  9                 TABLESPACE_NAME,
 10                 ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE,
 11                 SUM(BLOCKS) BLOCKS
 12            FROM DBA_DATA_FILES
 13           GROUP BY TABLESPACE_NAME, FILE_ID, FILE_NAME) D,
 14         (SELECT FILE_ID,
 15                 TABLESPACE_NAME,
 16                 ROUND(SUM(BYTES) / (1024 * 1024), 2) FREE_SPACE
 17            FROM DBA_FREE_SPACE
 18           GROUP BY TABLESPACE_NAME, FILE_ID) E,
 19         (SELECT FILE_ID, AUTOEXTENSIBLE FROM DBA_DATA_FILES) F
 20   WHERE D.TABLESPACE_NAME = E.TABLESPACE_NAME(+)
 21     AND D.FILE_ID = E.FILE_ID(+)
 22     AND D.FILE_ID = F.FILE_ID(+)
 23  UNION ALL --if have tempfile
 24  SELECT D.TABLESPACE_NAME,
 25         FILE_NAME "FILE_NAME",
 26         SPACE "SUM_SPACE(M)",
 27         USED_SPACE "USED_SPACE(M)",
 28         ROUND(NVL(USED_SPACE, 0) / SPACE * 100, 2) "USED_RATE(%)",
 29         AUTOEXTENSIBLE
 30    FROM (SELECT FILE_ID,
 31                 FILE_NAME,
 32                 TABLESPACE_NAME,
 33                 ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE,
 34                 SUM(BLOCKS) BLOCKS
 35            FROM DBA_TEMP_FILES
 36           GROUP BY TABLESPACE_NAME, FILE_ID, FILE_NAME) D,
 37         (SELECT FILE_ID,
 38                 TABLESPACE_NAME,
 39                 ROUND(SUM(BYTES_USED) / (1024 * 1024), 2) USED_SPACE,
 40                 ROUND(SUM(BYTES_FREE) / (1024 * 1024), 2) FREE_SPACE
 41            FROM V$TEMP_SPACE_HEADER
 42           GROUP BY TABLESPACE_NAME, FILE_ID) E,
 43         (SELECT FILE_ID, AUTOEXTENSIBLE FROM DBA_TEMP_FILES) F
 44   WHERE D.TABLESPACE_NAME = E.TABLESPACE_NAME(+)
 45     AND D.FILE_ID = E.FILE_ID(+)
 46     AND D.FILE_ID = F.FILE_ID(+)
 47   ORDER BY TABLESPACE_NAME, FILE_NAME;
TABLESPACE_NAME                FILE_NAME                                                                        SUM_SPACE(M) USED_SPACE(M) USED_RATE(%) AUTOEXTENSIBLE
------------------------------ -------------------------------------------------------------------------------- ------------ ------------- ------------ --------------
TEST_DB                         /oracle/database/orcl/TEST_DB                                                              2000       1976.31        98.82 YES
 
在此,我省略掉了其他無關的資訊。
透過這個可以得出一個結論,dba_tablespace_usage_metrics檢視提供的資訊不可靠,不能嫌麻煩,還得從DBA_DATA_FILE 和 DBA_FREE_SPACE 檢視查詢。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-687702/,如需轉載,請註明出處,否則將追究法律責任。

相關文章