Data Guard環境ならではの問題と対処法Oracleトラブル対策の基礎知識(7)(3/4 ページ)

» 2009年04月14日 00時00分 公開
[峯岸隆一株式会社コーソル]

REDOデータ転送の流れ

 以降では、実際にREDOデータの転送設定について説明していきます。REDOデータの転送方法は、次の初期化パラメータで設定します。

LOG_ARCHIVE_DEST_n
LOG_ARCHIVE_DEST_STATE_n
サンプル1 REDOデータを転送するための設定

 「n」は最大で10まで設定できます。Data Guardはアーカイブログ・モードで構成する必要があります。プライマリ・データベースで最低でも1つのアーカイブログファイルのあて先を指定するので、スタンバイ・データベースは最大で9個になるわけです。

 具体的な設定の例を挙げてみます。

LOG_ARCHIVE_DEST_1='LOCATION=/oracle/archive/ VALID_FOR=(ONLINE_LOGFILE, ALL_ROLES) 
DB_UNIQUE_NAME=PRIDB'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_2='SERVICE=STBDB VALID_FOR=(ONLINE_LOGFILE, PRIMARY_ROLE) DB_UNIQUE_NAME=STBDB'
LOG_ARCHIVE_DEST_STATE_2=ENABLE
サンプル2 LOG_ARCHIVE_DEST_2での設定例

 ここでは、LOG_ARCHIVE_DEST_2でスタンバイ・データベースへの転送方法を設定しています。REDOデータの転送方法にはいくつか種類がありますが、今回はアーカイブログを転送する方法を取り上げます。SERVICE の部分にスタンバイ・データベースへ接続できるOracle Netの接続文字列を指定します。

 DB_UNIQUE_NAMEの部分にはスタンバイ・データベースのインスタンス名を指定します。上記の例では便宜上、Oracle Netの接続文字列とスタンバイ・データベースのインスタンス名は同じにしています。

 また、図3の手順4および5で指定しているログ転送方式についても初期化パラメータLOG_ARCHIVE_DEST_nで指定することができます。

 デフォルトはアーカイバ・プロセス(ARCn)となっていますので、上記のようにLGWRと記載することでログライター・プロセス(LGWR)がREDO情報を転送するようにもできます。以下にLOG_ARCHIVE_DEST_2で指定する例についてご紹介します。

LOG_ARCHIVE_DEST_2='SERVICE=STBDB VALID_FOR=(ONLINE_LOGFILE, PRIMARY_ROLE) DB_UNIQUE_NAME=STBDB LGWR'  LGWRを指定 
サンプル3 ログ・ライター・プロセス(LGWR)を指定してREDO情報を転送する場合の例

 そのほかの転送方法や初期化パラメータに指定できるオプションはマニュアル「Oracle Data Guard 概要および管理」に詳細が記載されていますのでご参照ください。

REDOデータが生成されない操作には注意

 Oracle Databaseの処理には、REDOデータに記録を残さない NOLOGGINGというモードがあります。REDOデータを生成しないので、処理の実行速度を上げることができますが、一方で、Data Guard環境のプライマリ・データベースでNOLOGGINGモードで実行された処理は、スタンバイ・データベースに反映されません。

NOLOGGINGモードの処理は反映されない

 NOLOGGINGモードの処理が含まれたREDOデータをスタンバイ・データベースに適用すると、データファイルの一部が使用不可能になり、読み取り専用でスタンバイ・データベースをオープンしたときなどにエラーが発生します。

ORA-01578: ORACLE data block corrupted (file # 5, block # 6822)
ORA-01110: data file 5: '/oracle/oradata/pridb/test01.dbf'
ORA-26040: Data block was loaded using the NOLOGGING option
リスト1 NOLOGINGモードの処理が含まれるREDO情報が適用された場合のエラーの例

エラー発生時の対処法

 エラーを解消するには、プライマリ・データベースからデータファイルのバックアップをコピーして、スタンバイ・データベースをリカバリすることになります。

 こうした問題が発生しないようにするには、プライマリ・データベースを強制ロギング(FORCE LOGGING)に設定しておき、NOLOGGING モードでもREDOデータが生成されるようしておきます。

SQL> ALTER DATABASE FORCE LOGGING;
SQL> SELECT FORCE_LOGGING FROM V$DATABASE;
FOR
---
YES
リスト2 強制ロギング(FORCE LOGGING)モードに設定する例

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。