//Oracleドライブがいっぱいになった場合の復旧手順
-参考サイト
--http://www.roy.hi-ho.ne.jp/montague/lilical-oracle.html
**手順 [#meec25c8]
1.いっぱいになったドライブとは別のドライブに一時表領域を作成する。
この時点で、Oracleは元の一時表ファイルがなくなっても自動でこちらに一時表データを書き込んでくれる。
ALTER TABLESPACE TEMP ADD TEMPFILE
'C:\TEMP\TEMPXX.DBF' SIZE 512M AUTOEXTEND OFF
;
2.いっぱいになったドライブの一時表領域をOFFLINEにして削除する。
ALTER DATABASE TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORASMS\TEMP01.DBF' OFFLINE
;
ALTER DATABASE TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORASMS\TEMP01.DBF'
DROP INCLUDING DATAFILES
;
この時点でドライブに空き容量ができるはずなので確認。ロックされていると消せない場合もあるので、「unlocker」などのツールを使ってロックを解除しないといけない場合もある。(その場合はそのファイルをロックしているプロセスのプロセスIDを見て、動いていないプロセスかどうか判断する必要がある。)
プロセスIDがわかったら、以下のSQL結果と比較して、問題ないと判断できれば消しても良い。
/*
セッションの一覧を取得する
*/
select s.username, s.osuser, s.machine, s.terminal, s.program,
from v$session s, v$process p
where s.paddr = p.addr
;
3.一時表領域を、元のドライブに小さめのサイズで作り直す。
この際、AUTOEXTENDをOFFにするのを忘れないこと。
この時点で、Oracleは「1」の一時表ファイルがなくなっても自動でこちらに一時表データを書き込んでくれる。
ALTER TABLESPACE TEMP ADD TEMPFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORASMS\TEMP01.DBF' SIZE 2048M AUTOEXTEND OFF
;
4.「1」で作った一時表領域をOFFLINEにして削除する。
ALTER DATABASE TEMPFILE 'C:\TEMP\TEMPXX.DBF' OFFLINE
;
ALTER DATABASE TEMPFILE 'C:\TEMP\TEMPXX.DBF'
DROP INCLUDING DATAFILES
;
きちんと消えているかどうか確認。