2014年5月10日土曜日

OracleのUNDO表領域が肥大化した時の対処方法

ディスクフルになったシステムの復旧をするのに、まず現在のデータのバックアップを取得したいところだが、ディスクフルの状態では、エクスポートができないので空き容量を増やさなければならないという鶏が先か卵が先か状態に陥るってこと、よくありますよね?(よくはない

そんな時、もし、UNDO表領域が肥大している状態であれば、UNDO表領域を縮小し、Exportできるだけの領域を確保することができるかもしれないということを、Oracleの有識者から聞きかじり、調べた結果、以下を参考にしてなんとか切り抜けることができたので備忘録として残す。(環境はWindows7 pro 64bit)

参考:UNDO表領域の縮小


1.UNDO表領域の縮小を試みる。
(1)UNDO表領域の確認
command prompt> sqlplus /nolog
SQL> conn sys/pasword as sysdba;
SQL> show parameter undo_tablespace
NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
undo_tablespace                      string
UNDOTBS1

(2)一時的なUNDO表領域を作成する。
SQL> create undo tablespace UNDOTMP datafile '【表領域のpath】\UNDOTMP1.DBF' size 1G AUTOEXTEND ON;
表領域が作成されました。

(3)一時的なUNDO表領域に切り替える。
SQL> alter system set undo_tablespace='UNDOTMP' sid='orcl';
システムが変更されました。

(4)切り替わったことの確認
SQL> show parameter undo_tablespace
NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
undo_tablespace                      string
UNDOTMP

(5)切り替える前のUNDO表領域のサイズを縮小するために、表領域を削除後、再作成する。
SQL> drop tablespace UNDOTBS1 including contents and datafiles;
表領域が削除されました。
SQL> create undo tablespace UNDOTBS1 datafile '【表領域のpath】\UNDOTBS1.DBF' size 4G AUTOEXTEND ON;
表領域が作成されました。

(6)最後に再作成したUNDO表領域に切り戻す。
SQL> alter system set undo_tablespace='UNDOTBS1' sid='orcl';
システムが変更されました。

(7)切り替わったことの確認
SQL> show parameter undo_tablespace
NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
undo_tablespace                      string
UNDOTBS1

(8)一時的なUNDO表領域の削除
SQL> drop tablespace UNDOTMP including contents and datafiles;
表領域が削除されました。