制御ファイルが全滅・・ぶっ壊れた!
データファイル全損障害時のリカバリと同様、
これも重めだが、バックアップが取れていればリカバリ可能だ。
ここではオンラインバックアップからの戻しを想定した、メディアリカバリの流れを解説する。
リカバリ手順
(1) アラートログを参照しエラー状態を確認
発生し得るエラーは、ORA-00205 などがある。
※以後、アラートログを参照しつつ作業することをお勧めする。
Unix/Linuxの場合は、tail -f コマンドが便利。
(2) データベースの接続確認
$ sqlplus / as sysdba
ログインできた場合は abort オプションで強制シャットダウン
この場合、デフォルトの normal や immediate は不可。
SQL> shutdown abort
(3) バックアップからデータファイルをリストア
オンラインバックアップで取得したデータファイルを OS コマンドで戻す。
(4) マウントモードで起動
$ sqlplus / as sysdba
停止状態のため、 アイドル・インスタンスへ接続 と表示される。
SQL> startup mount
正常にマウントされることを確認。
(5) リカバリ実施
SQL> recover database using backup controlfile;
後は自動的にアーカイブからリカバリが行われるが、
途中で以下が出力した場合は手動で対応が必要となる。
--------------------------------------------------------- 検討すべきログ・ファイル:<アーカイブログファイル> ログの指定: {=suggested | filename | AUTO | CANCEL} ---------------------------------------------------------
この場合、アーカイブログファイルのフルパスを指定し Enter を押下するのだが、
困ったことに、アーカイブログそのものが出力されていないのに、
ログ順序番号以上のファイルを要求される場合がある。
これは予想だが、ログスイッチされ順序番号が繰り上がったものの、障害の影響により、
アーカイブが正常に行われなかった可能性が高いのではないかと思う。
そこで、最新の REDO ログファイルを指定してみると対処が可能であった。
ログの指定: {=suggested | filename | AUTO | CANCEL}
この後に、REDOログファイルのフルパスを指定し Enter を押下。
正常に適用が行われると、以下のメッセージが出力される。
ログが適用されました。メディア・リカバリが完了しました。
(6) インスタンス起動(リセットログ)
SQL> alter database open resetlogs;
resetlogs オプションでインスタンスを起動する。
(ログ順序番号が1にリセットされる)
以上。可能なら復旧したタイミングで、コールドバックアップを取得。