TEMP表領域が足りない…
無駄にTEMP表領域を使用するので、デフォルトで作成される容量じゃ足りない、となった。
標準で作成されるTEMP表領域はSMALLFILE表領域とのことで、最大サイズが決まっているらしい。
あまりSMALLFILEやBIGFILEについて考えたこともなかったので、かんたんに調べてみると、
Oracle 10g 以降は普通の表領域がSMALLFILE表領域として扱われるようになっている。
とのことですが、単に名前がそう呼ばれるようになっただけで、BIGFILE表領域という約30TBも扱えるでっかいファイルが登場したからだそうです。
SMALLFILE表領域が約30GBに対してBIGFILE表領域が約30TBと、扱えるサイズが1000倍?になっているらしい。
流石に今回30TBも使用はしませんが、30GBは超えるのでBIGFILE表領域へ拡張していきます。
方法
方法としては
- 表領域を一度ExportしてTEMP削除してBIGFILEで作り直してImportする。
- 一時使用するダミーの表領域を作成してTEMP削除してBIGFILEで作り直して元に戻してダミーを削除する。
簡単さで考えると①ですが、あえて②でやってみました。
TEMP表領域の名前はデフォルトから変更していないのでTEMPです。
ファイル名はTEMP01.DBFです。
手順
①まず一時的にメインにするダミーの表領域を作成します。
CREATE TEMPORARY TABLESPACE HOGE TEMPFILE 'V:\oracle\hoge\HOGE01.DBF
②ダミーの表領域をデフォルトの表領域に指定します。
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE HOGE;
③TEMP表領域を作り直すため削除しますが、再起動を挟まないと処理が終わらなくなったので挟みます。
shutdown immediate
starutp open
④DROP TABLESPACEします。
DROP TABLESPACE TEMP INCLUDING CONTENTS AND DATAFILES;
⑤BIGFILE表領域として再作成します。とりあえず1GBで無制限に
CREATE BIGFILE TEMPORARY TABLESPACE TEMP TEMPFILE 'V:\oracle\hoge\TEMP01.DBF SIZE 1000M AUTOEXTEND ON;
⑥デフォルト表領域をもとに戻します。
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP;
⑦再起動を挟んでダミーとして使用したHOGEを削除します。
shutdown immediate
starutp open
DROP TABLESPACE HOGE INCLUDING CONTENTS AND DATAFILES;
おしまい
あとがき
SMALLFILEからBIGFILEへ直接変更出来たらいいんだけどなーと思いました。