【Oracle】表領域の使用状況を確認するSQLまとめ|容量不足の予兆を早期に把握

【Oracle】表領域の使用状況を確認するSQLまとめ|容量不足の予兆を早期に把握 Oracle

Oracleデータベースを安定的に運用するうえで、表領域(tablespace)の使用状況を定期的に確認することは非常に重要です。容量不足に陥る前に異常を察知し、早期に対処することでシステム停止やパフォーマンス低下を防ぐことができます。

本記事では、Oracleで表領域の使用状況を把握するためのSQLを目的別にまとめて紹介します。

1. 表領域ごとの使用率を確認するSQL

現在の使用率を把握するには、以下のSQLが便利です。

SELECT
  df.tablespace_name,
  ROUND(SUM(df.bytes) / 1024 / 1024, 2) AS total_mb,
  ROUND(SUM(df.bytes - NVL(f.free_bytes, 0)) / 1024 / 1024, 2) AS used_mb,
  ROUND(NVL(f.free_bytes, 0) / 1024 / 1024, 2) AS free_mb,
  ROUND((SUM(df.bytes - NVL(f.free_bytes, 0)) / SUM(df.bytes)) * 100, 2) AS used_percent
FROM
  dba_data_files df
LEFT JOIN (
  SELECT tablespace_name, SUM(bytes) AS free_bytes
  FROM dba_free_space
  GROUP BY tablespace_name
) f ON df.tablespace_name = f.tablespace_name
GROUP BY df.tablespace_name, f.free_bytes
ORDER BY used_percent DESC;

このSQLでは、各表領域の総容量・使用済み容量・空き容量・使用率(%)を一覧で確認できます。使用率が高い表領域は早期の対応が必要です。

2. 自動拡張が有効か確認するSQL

表領域が自動で拡張される設定かどうかを調べるには、次のSQLを使用します。

SELECT
  tablespace_name,
  file_name,
  autoextensible,
  maxbytes / 1024 / 1024 AS max_mb,
  bytes / 1024 / 1024 AS current_mb
FROM dba_data_files
ORDER BY tablespace_name;

AUTOEXTENSIBLE列がYESであれば、自動拡張が有効です。
ただし、MAXBYTESに上限が設定されている場合、完全な自動拡張とはいえない点に注意が必要です。

3. TEMP表領域の使用状況を確認するSQL

TEMP表領域はソートやハッシュ処理など一時データのために使われます。以下のSQLで使用状況を確認できます。

SELECT
  tablespace_name,
  SUM(bytes_used) / 1024 / 1024 AS used_mb,
  SUM(bytes_free) / 1024 / 1024 AS free_mb
FROM v$temp_space_header
GROUP BY tablespace_name;

一時表領域の使用量が高いまま長時間変わらない場合、SQLの見直しや表領域の拡張が必要になることがあります。

4. UNDO表領域の使用状況を確認するSQL

UNDO表領域の圧迫状況も確認しておきましょう。

SELECT
  tablespace_name,
  SUM(bytes) / 1024 / 1024 AS size_mb
FROM dba_undo_extents
GROUP BY tablespace_name;

UNDOの過剰な使用はトランザクションの肥大化や不適切な設定が原因であることが多く、パフォーマンス問題につながります。

5. 表領域の空き領域詳細を確認するSQL

フラグメントの状況を確認するには、以下のSQLが役立ちます。

SELECT
  tablespace_name,
  COUNT(*) AS free_extents,
  MAX(bytes) / 1024 / 1024 AS max_free_mb
FROM dba_free_space
GROUP BY tablespace_name;

フリーエクステントが非常に多い、あるいは最大サイズが小さい場合、フラグメンテーションの可能性があります。

まとめ

Oracleデータベースの安定運用には、表領域の使用状況を定期的にチェックすることが不可欠です。本記事で紹介したSQLを活用し、次のポイントを意識しておくとよいでしょう。

  • 使用率が80%を超える表領域は事前に拡張検討
  • TEMP/UNDO表領域の突発的な増加にも注意
  • 自動拡張の設定とその上限も確認
  • 表領域の断片化も長期的にはパフォーマンスに影響

これらの情報を監視ツールやスクリプトに組み込んでおくことで、容量不足の兆候をいち早く検知でき、障害の未然防止に役立ちます。