ACTIVE このオンラインREDOログはアクティブです。インスタンス・リカバリに必要です。ただし、現在書込みが行われているログではありません。ブロック・リカバリに使用されている可能性があります。また、アーカイブされる場合とされない場合があります
高度なユーザー管理のリカバリの例
現在書込みが行われているREDOログ・グループは CURRENT で、それ以外に ACTIVE なREDOログ・グループが存在する。
つまり、インスタンス・リカバリの際に CURRENT と ACTIVE なREDOログ・グループを使用するということになる。
ログスイッチの際に、チェックポイントが発生してインスタンス・リカバリの際には CURRENT のREDOログ・グループのみ使用すると思ってたけど、違った。
ログスイッチ後に最初のチェックポイントが発生するまでは、最後のチェックポイントは CURRENT じゃないREDOログに含まれ、インスタンス・リカバリの時に使われる。ということは、alter system checkpoint; を実行すれば CURRENT 以外の REDOログ・グループのステータスは INACTIVE になるはず。
以下はちょっと試してみた結果。
データファイルヘッダの SCN を確認する。
SQL> select checkpoint_change# from v$datafile_header; CHECKPOINT_CHANGE# ------------------ 219082 219082 219082 219082
最後のチェックポイントの SCN は 「219082」。
REDOログの状態を確認する。
SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------- 1 1 33 104857600 2 YES ACTIVE 219076 07-JAN-10 2 1 32 104858112 2 YES INACTIVE 216933 07-JAN-10 3 1 34 104857600 2 NO CURRENT 219634 07-JAN-10
グループ3が CURRENT で最初の SCN は「219634」。グループ1が ACTIVE で最初の SCN は「219076」。
従って、最後のチェックポイント「219082」はグループ1にある。
強制的にチェックポイントを発生させる。
SQL> alter system checkpoint;
データファイルヘッダの SCN を確認する。
SQL> select checkpoint_change# from v$datafile_header; CHECKPOINT_CHANGE# ------------------ 219675 219675 219675 219675
最後のチェックポイントの SCN は 「219675」。
REDOログの状態を確認する。
SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------- 1 1 33 104857600 2 YES INACTIVE 219076 07-JAN-10 2 1 32 104858112 2 YES INACTIVE 216933 07-JAN-10 3 1 34 104857600 2 NO CURRENT 219634 07-JAN-10
CURRENT 以外が INACTIVE になっている。想定通り。