REDOメンバーが破損・消失

REDOログファイル2メンバーの多重構成で運用中に、あるグループの1メンバーが
消失したケースを想定した、リカバリの流れを解説する。
(このリカバリ手順は、健在なメンバーが残存する時という条件付き。)

メンバー障害からのリカバリ

(1) アラートログを参照しエラー状態を確認

発生し得るエラーは、ログ順序番号が一致しないを示す ORA-00314 や、
付随して出力されるオンラインログやスレッド情報の ORA-00312 などがある。

※以後、アラートログを参照しつつ作業することをお勧めする。
Unix/Linux の場合、別ウィンドウで tail -f コマンドが便利。

(2) データベースの接続確認

sqlplus / as sysdba

(3) REDOログファイルのステータス確認

SQL> select * from v$logfile;

障害時には、対象メンバーのステータスが INVALID となっている。

(4) カレントロググループの確認

このメンバーが属するグループが CURRENT の場合は実行できないので、
その場合は手動でログスイッチして INACTIVE の状態になることを確認する。

SQL> select * from v$log;

※ 手動ログスイッチする場合

SQL> alter system switch logfile;

(5) 消失したメンバーを論理削除

SQL> alter database drop logfile member '対象のREDOログ(フルパス)';

内部的に論理削除される。

(6) メンバーの再構成

SQL> alter database add logfile member '再構成するREDOログ(フルパス)'
reuse to group <グループ番号>;

復旧したいファイル(論理削除したファイル名をフルパスで指定)と、
リカバリに使うグループ番号を指定する。

(7) 手動ログスイッチする

SQL> alter system switch logfile;

即時反映はされないので、リカバリしたグループまでログスイッチで循環させ、
再構成したメンバーを正しく認識させる。

(8) REDO ログファイルのステータス確認

SQL> select * from v$logfile;

対象メンバーのステータスが INACTIVE から NULL に変わっていること。

(9) インスタンス再起動

必須ではないが念のため、再起動して問題ないことを確認する。
アラートログもあわせて参照すること。

SQL> shutdown immediate

※ コールドバックアップもこのタイミングで取得したほうがよい。

% sqlplus / as sysdba
SQL> startup

以上でリカバリが完了。グループ全損でなければ、データベースは正常に稼働
し続けるが、耐障害性のために3グループ2メンバー以上の構成は維持したい。

関連記事