データファイルが全滅・・ぶっ壊れた!
こんな由々しき事態に遭遇したら、冷や汗タラタラものだが
データファイルのバックアップとアーカイブログがあればリカバリ可能だ。
こんな時ほど、ナメるなよ!と DBA 魂を全開に。
対処は recover database コマンドで行うが、色々と手順を踏む必要がある。
ここではオンラインバックアップからの戻しを想定した、メディアリカバリの方法を紹介する。
(制御ファイルやREDOログファイルは生きている前提)
recover databaseによるメディアリカバリ
(1) アラートログを参照しエラー状態を確認
発生し得るエラーは、ORA-01171、ORA01122、ORA-01115 などがある。
※以後、アラートログを参照しつつ作業することをお勧めする。
Unix/Linuxの場合は、tail -f コマンドが便利。
(2) データベースの接続確認・強制終了
$ sqlplus / as sysdba SQL> shutdown abort ログインできた場合は abort オプションで強制シャットダウン この場合、デフォルトの normal や immediate は不可。
(3) バックアップからデータファイルをリストア
オンラインバックアップで取得したデータファイルを OS コマンドで戻す。
(4) マウントモードで起動
$ sqlplus / as sysdba 停止状態のため、 アイドル・インスタンスへ接続 と表示される。 SQL> startup mount 正常にマウントされることを確認。
(5) データファイルのステータス確認
SQL> select name, status from v$datafile; ステータスが ONLINE であることを確認。 ※system 表領域のみ、ステータスが SYSTEM となる。 もしオフラインのデータファイルが存在するなら、以下の SQL コマンドを実行。 alter database datafile '対象ファイル(フルパス)' online;
(6) アーカイブの自動リカバリモードを有効化
SQL> set autorecovery on
(7) リカバリを実施
SQL> recover database;
ロールフォワードにより障害発生直前の状態までリカバリする。
インスタンスを起動
SQL> alter database open;
アラートログにエラーが出力されておらず、正常にアクセス可能であることを確認する。
以上でリカバリ終了。可能なら復旧したタイミングで、コールドバックアップを取得。
データファイル全損を想定したリカバリケースだったが、
単一障害でも手順に大差はなく、リストア対象が異なるくらいである。
また、ロールフォワードでは、対象のアーカイブログが1グループでも
損失している場合は、完全リカバリは行えなくなる(不完全リカバリ)。
多重化されたうち、1メンバーでも健在であれば完全リカバリ可能なので、
復旧してから健在なREDOログを元に損失メンバーを再作成すればよい。
“データファイル全損障害からのリカバリ手順” への1件のフィードバック