以降では、実際にREDOデータの転送設定について説明していきます。REDOデータの転送方法は、次の初期化パラメータで設定します。
LOG_ARCHIVE_DEST_n LOG_ARCHIVE_DEST_STATE_n
「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
ここでは、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を指定
そのほかの転送方法や初期化パラメータに指定できるオプションはマニュアル「Oracle Data Guard 概要および管理」に詳細が記載されていますのでご参照ください。
Oracle Databaseの処理には、REDOデータに記録を残さない NOLOGGINGというモードがあります。REDOデータを生成しないので、処理の実行速度を上げることができますが、一方で、Data Guard環境のプライマリ・データベースで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
エラーを解消するには、プライマリ・データベースからデータファイルのバックアップをコピーして、スタンバイ・データベースをリカバリすることになります。
こうした問題が発生しないようにするには、プライマリ・データベースを強制ロギング(FORCE LOGGING)に設定しておき、NOLOGGING モードでもREDOデータが生成されるようしておきます。
SQL> ALTER DATABASE FORCE LOGGING; SQL> SELECT FORCE_LOGGING FROM V$DATABASE; FOR --- YES
Copyright © ITmedia, Inc. All Rights Reserved.