Oracleデータベースで大規模なソート処理や集計を行うと、
次のようなエラーが発生することがあります。
このエラーは、一時表領域(TEMP)の空き容量不足によって
SQL実行が中断されたことを意味します。
ここでは、その原因と具体的な対処手順をわかりやすく解説します。
⚠️ エラーの意味
「ORA-01652」は、OracleがSQL実行中に必要な一時領域を確保できなかったことを示すエラーです。
特に次のような処理で発生しやすくなります。
-
大量データを扱う ORDER BY / GROUP BY / DISTINCT / JOIN
-
インデックス作成 や 集計処理
-
TEMP表領域が固定サイズで、自動拡張が無効
🔍 主な原因
原因 | 詳細 |
---|---|
TEMP表領域の容量不足 | TEMPファイルのサイズが小さい |
自動拡張が無効 | TEMPFILE の AUTOEXTEND が OFF |
不要なセッションがTEMPを占有 | 他ユーザーの大規模SQLがTEMPを使用中 |
SQLの非効率な実行計画 | インデックス未使用・結合順序の問題 |
🧭 対処手順
① TEMP表領域の使用状況を確認
現在の使用率を確認します。
または以下のSQLでも確認可能です。
② TEMPファイルを追加または拡張
TEMP領域が不足している場合、ファイルを追加します。
または新しいTEMPファイルを追加します。
③ 不要なセッションを確認・終了
一時領域を使い続けているセッションを確認します。
不要なセッションが確認できた場合は、管理者権限で終了します。
④ SQLをチューニングする
-
インデックスを利用する
-
不要なDISTINCTやORDER BYを削除
-
結合順序を見直す
-
集計処理を段階的に分割
一時領域を減らすため、SQLの実行計画を確認します。
⑤ TEMP表領域を再作成(最終手段)
TEMPファイル破損や肥大化が疑われる場合は、
再作成を検討します。
🌟 まとめ
対処法 | 内容 |
---|---|
TEMP使用量確認 | V$TEMP_SPACE_HEADERやV$SORT_USAGEで確認 |
TEMP拡張 | ADD TEMPFILE または RESIZE |
セッション整理 | 不要なセッションをKILL |
SQLチューニング | 実行計画の見直し |
TEMP再作成 | 最終手段として実施 |
📘 補足:再発防止策
-
定期的に
V$TEMP_SPACE_HEADER
を監視 -
TEMP表領域は AUTOEXTEND ON を推奨
-
大規模SQL実行前に EXPLAIN PLAN を確認
-
バッチ処理では 分割実行 を検討