Oracle 12cR2をカスタムデータベース、アーカイブログモード、高速リカバリ領域なし、PDBなしでインストールし、運用しています。
8つのREDOログ・グループをそれぞれ1つずつのメンバで構成し、多重化はしてません。
不完全リカバリのテストを実施するため、カレントのREDOログ・グループを確認し、DML発行後コミット。この時点ではLGWRによりログメンバに更新履歴が書き込まれた状態。次にカレントのREDOログ・グループメンバを削除し
shutdown immediate
→ 素直にimmediateでいくときとここでエラー出るときと何故かまばら
startup
→ エラー発覚
ここまではよいのですが、ここからが問題のポイントで、以下手順を箇条書きします。
①SQL*Plusから入り直しマウントモードへ
startup mount
②削除したREDOログ・グループのログ順序番号を確認
select g.group# ,g.sequence# ,g.status ,m.member from v$log g, v$logfile m where g.group# = m.group# order by g.group#, m.member;
※削除したログ・グループのステータスはCURRENT、その他はINACTIVEとかになってます。
③REDOログの初期化
alter database clear logfile group n;
→ 既にアーカイブ済みのログ・グループに対して初期化するというやつらしいので当然失敗
alter database clear unarchived logfile group n
→ 「データベースを変更しました」
alter database open;
④データ戻ってる
この仕組みがまったく理解できません。オンラインREDOログファイル、メモリ上にしか保持されていないデータ(データファイル書き込みまでいってない)を削除したのに、どこから戻ってきたんでしょうか。③のSQLは、とりあえず壊れたメンバを放置しているとDBが動かないから再作成のために初期化するみたいな認識だったのですが、何故更新が反映されてるのでしょうか。こちらが最初の質問で、2つめは上記の手順③について、
ORA-01624 ~中略~ クラッシュ・リカバリに必要です。
と出るときがありまして、こうなるともう不完全リカバリへ進むしかないのですが、何故、削除したログ・グループのステータスはいつもCURRENTなのに、③の結果が毎回変わることがあるのでしょうか。本番環境では③でオープンできるに越したことはないのですが、成功と失敗の分かれ目を把握しておきたいと思い質問させて頂きました。
また仮にOracleの内部構造的なもので、普通にはそこまで把握しきれないからどっちが来ても対応できるようにしとくということであればそれで納得します。
宜しくお願い致します。