リカバリ可能性のための構成

ARCHIVELOGモード

インスタンス障害からの復旧は、オンラインREDOログファイルがあれば可能です。しかし、メディア障害は、オンラインREDOログのみでは、復旧を完全には保証できません。オンラインREDOログしか保持しないNOARCHIVELOGモードの場合、メディア障害が発生したときには、基本的にバックアップの取得時点に戻す必要があります。メディア障害からの復旧にリカバリを含めるのであれば、ARCHIVELOGモードを選択する必要があります。

ARCHIVELOGモードの構成

SQL> ARCHIVE LOG LIST
データベース・ログ・モード     非アーカイブ・モード
自動アーカイブ                 使用禁止
アーカイブ先                    USE_DB_RECOVERY_FILE_DEST
最も古いオンライン・ログ順序   630
現行のログ順序               632
SQL> SHUTDOWN IMMEDIATE
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> STARTUP MOUNT
ORACLEインスタンスが起動しました。

Total System Global Area 1068937216 bytes
Fixed Size                  2220200 bytes
Variable Size             801115992 bytes
Database Buffers          260046848 bytes
Redo Buffers                5554176 bytes
データベースがマウントされました。
SQL> ALTER DATABASE ARCHIVELOG;

データベースが変更されました。

SQL> ALTER DATABASE OPEN;

データベースが変更されました。

SQL> ARCHIVE LOG LIST
データベース・ログ・モード     アーカイブ・モード
自動アーカイブ                 有効
アーカイブ先                    USE_DB_RECOVERY_FILE_DEST
最も古いオンライン・ログ順序   630
アーカイブする次のログ順序    632
現行のログ順序               632

また、ARCHIVELOGモードにする場合には、アーカイブ先の検討が必要です。アーカイブ先は、LOG_ARCHIVE_DEST_n初期化パラメータで設定します。

構文:LOG_ARCHIVE_DEST_n={LOCATION | SERVICE}=ディレクトリ {MANDATORY}

LOG_ARCHIVE_DEST_nを使用する場合には、カーかイブ先の指定以外に、ローカルまたはリモートの指定、およびアーカイブ先が必須であるか任意であるかの指定を行います。

LOCATION属性
ローカルディレクトリにアーカイブを作成する
SERVICE属性
リモート上にアーカイブログファイルを転送する。主にData Guardで使用
MANDATORY属性
この接続先にアーカイブが完了していないと、オンラインREDOログファイルを上書きすることができない。MANDATORYを指定しない場合、アーカイブは任意となる

MANDATORYを指定した場合、指定のディレクトリへのアーカイブが必須です。そのため、万が一アーカイブ先の障害により正常にアーカイブができない場合、LGWRはオンラインREDOログを上書きすることができず、いずれインスタンス障害となります。MANDATORYが有効なケースは、指定のディレクトリに対するアーカイブが必須の場合です。例えば、Data Guardを構成している場合のスタンバイデータベースを指定する場合に効果的です。

兎に角nか所へのアーカイブが正常にできればよいという場合は、LOG_ARCHIVE_MIN_SUCCEED_DESTを検討するとよいでしょう。このパラメータには、最低限正常にアーカイブできなくてはならないアーカイブ先を指定します。

アーカイブ先を決定したら、次はアーカイブ先の領域管理について検討します。アーカイブ先の領域が不足すればARCnが待機し、それに伴ってLOGWRもサーバープロセスも待機します。

11gでは、フラッシュリカバリ領域(LOG_ARCHIVE_LOG_10)が指定されています。フラッシュリカバリ領域は、REDOログのアーカイブ先以外にも、バックアップファイルなどの格納先として利用されます。

フラッシュリカバリ領域

フラッシュリカバリ領域を使用するファイルには、永続的に格納されるファイルと一時的に格納されるファイルがあります。

永続的なファイル
現行の制御ファイルの多重化されたコピー
オンラインREDOログの多重化されたコピー
一時的なファイル
アーカイブログファイル
データファイルのコピー
制御ファイルのコピー
制御ファイルの自動バックアップ
バックアップピース
フラッシュバックログ

尚、フラッシュバックログには、フラッシュリカバリ領域が必須です。それ以外は、フラッシュリカバリ領域の使用は必須ではありません。

フラッシュリカバリ領域を利用するための設定(初期化パラメータの設定 )

DB_RECOVERY_FILE_DEST_SIZE
フラッシュリカバリ領域の最大サイズを指定します。デフォルトでは0に設定されているため、フラッシュリカバリ領域を利用するためには必ず任意のサイズに設定しなければなりません。
DB_RECOVERY_FILE_DEST
フラッシュリカバリ領域の位置を指定します。デフォルトはnullとなっていますので、フラッシュリカバリ領域を利用するためには必ず任意のディレクトリを指定しなければなりません。

DB_RECOVERY_FILE_DESTは、DB_RECOVERY_FILE_DEST_SIZEを依存パラメータにしているため、先に設定しようとするとORA-02097、ORA-19802エラーが発生します。そのため、必ず先にDB_RECOVERY_FILE_DEST_SIZEを設定してから、DB_RECOVERY_FILE_DESTを設定してください。

フラッシュリカバリ領域がいっぱいになったときの回避方法

フラッシュリカバリ領域の使用率はV$RECOVERY_FILE_DESTビューから確認します。

SQL> select * from v$recovery_file_dest;

NAME                                SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
----------------------------------- ----------- ---------- ----------------- ---------------
/opt/app/oracle/flash_recovery_area 5218762752  18604032   0                 1
SPACE_LIMIT
DB_RECOVERY_FILE_DEST_SIZEで設定しているサイズ
SPACE_USED
現在使用済みのサイズ

フラッシュリカバリ領域がいっぱいになった場合には、以下のようにフラッシュリカバリ領域が満杯になったことを示すORA-19815がアラートログに出力されます。このとき、インスタンスがダウンしたり、バックアップが取得できなくなることにはなりません。Oracleが自動的に古いファイルから削除してくれますが、あまり好ましいことではないので、手動でのメンテナンスを検討する必要があります。

まとめ(フラッシュリカバリ機能の利点を生かした運用)

  • フラッシュリカバリ領域を利用する場合は、必ず適切なサイズを見積もり、余裕を持って設定を行ってください
  • もし領域不足になった場合は、サイズを大きくするか、不要なファイルの削除を検討してください
  • 削除する場合は、OSコマンドでは削除せず、必ずRMANのDELETEコマンドで削除してください
  • 誤ってOSコマンドで削除してしまった場合は、RMANよりCROSSCHECKを行い、実在しないファイルをOracleに認識させてください
  • 空き領域の確保後は、必ず保存方針の見直しを行いDB_RECOVERY_FILE_DEST_SIZEを適切な値に設定してください

富士山マガジンサービス