【Oracle】表領域の空き容量を調べる方法|DBA_FREE_SPACEの活用

【Oracle】表領域の空き容量を調べる方法|DBA_FREE_SPACEの活用 Oracle

Oracleデータベースでは、表領域の使用状況や空き容量を定期的に確認することが重要です。特に容量逼迫による処理失敗を防ぐためにも、DBA_FREE_SPACEビューを活用した監視が効果的です。

この記事では、表領域の空き容量をSQLで確認する方法や、使用率の算出例について詳しく解説します。

DBA_FREE_SPACEとは

DBA_FREE_SPACEビューは、表領域における未使用領域(空きエクステント)を確認できるデータディクショナリビューです。これを使えば、各表領域がどれだけ空いているかを正確に把握することができます。

表領域ごとの空き容量を確認するSQL

以下のSQLは、各表領域の空き容量(MB)を集計して表示します。

SELECT tablespace_name,
       ROUND(SUM(bytes) / 1024 / 1024, 2) AS free_mb
FROM dba_free_space
GROUP BY tablespace_name
ORDER BY tablespace_name;

このSQLで表示されるfree_mb列が、現在の空き容量(MB)です。

使用率を確認するSQL

空き容量だけでなく、使用率も併せて確認するには、DBA_FREE_SPACEDBA_DATA_FILESを結合して以下のように記述します。

SELECT a.tablespace_name,
       ROUND(b.total_mb, 2) AS total_mb,
       ROUND(a.free_mb, 2) AS free_mb,
       ROUND((b.total_mb - a.free_mb) / b.total_mb * 100, 2) AS used_pct
FROM (
  SELECT tablespace_name,
         SUM(bytes) / 1024 / 1024 AS free_mb
  FROM dba_free_space
  GROUP BY tablespace_name
) a
JOIN (
  SELECT tablespace_name,
         SUM(bytes) / 1024 / 1024 AS total_mb
  FROM dba_data_files
  GROUP BY tablespace_name
) b ON a.tablespace_name = b.tablespace_name
ORDER BY used_pct DESC;

このクエリにより、各表領域の総容量・空き容量・使用率が一覧で表示されます。

注意点

DBA_FREE_SPACEビューは、未使用領域のエクステント単位で管理されています。そのため、細かく分割されている場合は、集計しないと全体の空き容量がわかりづらいことがあります。

また、AUTOEXTENDが有効な表領域については、最大サイズを考慮する場合としない場合で監視基準が異なるため、環境に応じて判断が必要です。

まとめ

Oracleの表領域の空き容量は、DBA_FREE_SPACEDBA_DATA_FILESビューを活用することで的確に把握できます。これらの情報をもとに、監視ツールでアラートを設定したり、定期的な容量確認を行うことで、突発的な容量不足を未然に防ぐことが可能になります。