Oracle で各表領域の空き領域と断片化情報を表示する方法
Oracle データベースの各表領域ごとの空き領域と断片化情報を表示する方法を記載します。この SQL は SYS ユーザーあるいは SYSTEM ユーザーで実行する必要があります。Oracle8i、Oracle9i、Oracle10g で動作確認済みです。COMP SUM OF nfrags totsiz avasiz ON REPORT
BREAK ON REPORT
SET PAGES 100
COL tsname FORMAT a16 JUSTIFY c HEADING 'Tablespace'
COL nfrags FORMAT 999,990 JUSTIFY c HEADING 'Free|Frags'
COL mxfrag FORMAT 999,999 JUSTIFY c HEADING 'Largest|Frag (MB)'
COL totsiz FORMAT 999,999 JUSTIFY c HEADING 'Total|(MB)'
COL avasiz FORMAT 999,999 JUSTIFY c HEADING 'Available|(MB)'
COL pctusd FORMAT 990 JUSTIFY c HEADING 'Pct|Used'
SELECT
TOTAL.TABLESPACE_NAME tsname,
D nfrags,
C / 1024 / 1024 mxfrag,
A / 1024 / 1024 totsiz,
B / 1024 / 1024 avasiz,
(1 - NVL(B,0) / A) * 100 pctusd
FROM
(SELECT
SUM(bytes) A,
tablespace_name
FROM dba_data_files
GROUP BY tablespace_name) TOTAL,
(SELECT SUM(bytes) B,
MAX(bytes) C,
COUNT(bytes) D,
tablespace_name
FROM dba_free_space
GROUP BY tablespace_name) FREE
WHERE
TOTAL.TABLESPACE_NAME = FREE.TABLESPACE_NAME (+);
結果として表示される各列はそれぞれ次のようになります。
Tablespace : 表領域名
Free Frags : 空き領域における断片化数
Largest Frag (MB) : 空き領域が断片化している場合、その最大サイズ(MB)
Total (MB) : 表領域が属するデータファイルのサイズ(MB)
Available (MB) : 表領域における使用可能エクステントのサイズ(MB)
PctUsed : 表領域における使用率(%)
