開発環境のDB(Oracle Database)サーバーにて、ディスク容量が100%に到達してしまう事象が発生しました。
過去に何度かHDD領域を拡張して対応していたものの、すぐにまた100%になってしまうため、根本的な原因を調査することに。
すると、Oracleの一時表領域(TEMP領域のデータファイル)が「32GB+11GB」と異常に肥大化していることが判明しました。
容量不足を解消するため、肥大化した一時ファイル(Tempfile)を一度削除し、再作成する対応を行った際の備忘録です。
ステップ1:肥大化した一時ファイル(Tempfile)の削除
まずは、Oracleのシステム情報から対象となる一時ファイルの格納先を指定し、論理的に削除します。
ALTER DATABASE TEMPFILE '【ファイル格納場所】/temp01.dbf' DROP;【重要】物理ファイルの削除を忘れずに!
上記のSQLを実行してOracle上の管理から外しても、OS上には物理的なデータファイル(temp01.dbf)がそのまま残っています。ディスク容量を空けるために、必ずOSのコマンド等で物理的にもファイルを削除してください。
ステップ2:表領域の管理方式(ローカル管理か否か)を確認
次に、対象の表領域が「ローカル管理(LOCAL)」かどうかを調べます。この管理方式によって、後続のファイル追加(再作成)の構文が若干異なります。
以下のSQLを実行して確認します。
SELECT TABLESPACE_NAME, EXTENT_MANAGEMENT FROM DBA_TABLESPACES;結果の EXTENT_MANAGEMENT の値が LOCAL か、それ以外かを確認してください。
ステップ3:一時ファイルの再作成(追加)
確認した管理方式に合わせて、一時ファイルを再作成(追加)します。
パターンA:extent_managementが「LOCAL」の場合
一時表領域(TEMP)に対して、一時ファイル(Tempfile)を追加します。
ALTER TABLESPACE TEMP
ADD TEMPFILE '【ファイル格納場所】/temp01.dbf'
SIZE 100M;パターンB:extent_managementが「LOCAL」以外の場合
※ディクショナリ管理などの通常の表領域に対してデータファイルを追加・再利用する場合の構文です。
ALTER TABLESPACE my_tablespace
ADD DATAFILE '【ファイル格納場所】/temp01.dbf'
SIZE 10M
REUSE
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED;これで一時表領域のクリアと再割り当てが完了しました。
とりあえず開発環境のDBは正常に動くようになったので、しばらくはこれで様子を見ようと思います!