No Oracle, No Life.

Oracle 製品と戯れる日々の記録。

12c DataGuard 遠隔同期インスタンスをつくってみた

このエントリは、JPOUG Advent Calendar 2016の20日目です。

昨日の記事は Masashi Matsushita さんの ちょっとした衝撃を受けたこと。 でした。

今回は 12c(12.1.0.1)からの Data Guard の新機能である、「遠隔同期(FarSync)」をテーマに
遠隔同期インスタンスを実際に構築してみたいと思います。

昨今BCP対策のため、Data Guard を利用しスタンバイサイトを遠隔地に配置する、
といった構成はよくあるのではないかと思います。しかしスタンバイ環境を
遠隔地に配置すると、REDO転送の際にネットワークがボトルネックとなり、
プライマリサイトのパフォーマンス劣化を引き起こす可能性があります。

遠隔同期インスタンスは、プライマリサイトからREDOを受け取り、それを
他のスタンバイサイトに送信する、リモートの宛先です。これをプライマリサイトの近くに
作成することにより、プライマリサイトと遠隔同期インスタンス間のネットワーク待機時間が
小さくなり、コミット・レスポンス時間に対する影響を最小限に抑えることが可能です。

なお、この遠隔同期インスタンスは Oracle Active Data Guard 機能の一部であるため、
Oracle Active Data Guard のライセンスが必要です。ご注意ください。

では、遠隔同期インスタンスを構築してみます。
今回は3台の端末を使用しましたが、同じサーバに構築することも可能です。

■検証環境
以下の環境で確認しました。
なお、すでにプライマリ~スタンバイの Data Guard 環境が構築済みであるとします。
(フィジカルスタンバイ環境の構築手順は割愛いたします)

〇プライマリサイト(ホスト名:dgnode1)
OS:Oracle Linux 6.6 (64-bit)
DB:Oracle Database Enterprise Edition 12.1.0.2
インスタンス名:orcl ※Non-CDB構成

〇スタンバイサイト(ホスト名:dgnode2)
OS:Oracle Linux 6.6 (64-bit)
DB:Oracle Database Enterprise Edition 12.1.0.2
インスタンス名:standby ※フィジカルスタンバイ

〇遠隔同期サイト(ホスト名:dgnode3)
OS:Oracle Linux 6.6 (64-bit)
DB:Oracle Database Enterprise Edition 12.1.0.2
インスタンス名:farsync

 

■手順を実行する上での注意点について
手順はあくまで個人の趣味の範囲で記載させて頂いております。
その為実行頂く場合は全て自己責任でお願い致します。

 

■手順概要
遠隔同期インスタンスを構築するおおまかな手順は、以下の通りです。

1. プライマリサイトにて、遠隔同期インスタンス用の制御ファイル作成
2. 初期化パラメータファイル(pfile)の編集
3. pfile から spfile を作成
4. プライマリサイトから 1. で作成した制御ファイルと遠隔同期インスタンス向けパラメータファイルを遠隔同期サイトにコピー
5. プライマリサイトからパスワードファイルを遠隔同期サイトにコピー
6. ネットワークの設定(listener.ora/tnsnames.ora)
7. 遠隔同期サイトでスタンバイREDOログファイル作成
8. マウントモードで遠隔同期インスタンスを起動
9. 動作確認

では、実際のコマンドを見ていきます。

1. プライマリサイトにて、遠隔同期インスタンス用の制御ファイル作成
遠隔同期インスタンス用の制御ファイルを作成する際は、プライマリ・データベースは
マウントまたはオープンされている必要があります。

#プライマリサイト(dgnode1)

SQL> select status from v$instance;
STATUS
————
OPEN

SQL> ALTER DATABASE CREATE FAR SYNC INSTANCE CONTROLFILE AS ‘/tmp/farsync_control01.ctl’;

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

 
2. 初期化パラメータファイル(pfile)の編集
まず、プライマリサイトで使用されるサーバー・パラメータ・ファイル(SPFILE)からパラメータ・ファイル(PFILE)を作成します。
パラメータ・ファイル内の初期化パラメータ設定の大部分は遠隔同期インスタンスにも適しますが、一部変更が必要なものがあります。

#プライマリサイト(dgnode1)

SQL> create pfile=’/tmp/initORCL.ora’ from spfile;

ファイルが作成されました。

 
次に、各サイト向けに初期化パラメータファイルを編集していきます。
以下に使用されるパラメータ(一部)の一例を記載します。

プライマリサイトでは、LOG_ARCHIVE_DEST_2 に遠隔同期サイトを設定し、
LOG_ARCHIVE_DEST_3にスタンバイサイトを設定しています。
これは、遠隔同期サイトがダウンした場合には
直接スタンバイサイトにREDOを転送するためです。

#プライマリサイト(dgnode1)

DB_UNIQUE_NAME=orcl
CONTROL_FILES=’/u01/app/oracle/oradata/orcl/control01.ctl’
DB_FILE_NAME_CONVERT=’/standby/’,’/orcl/’
LOG_FILE_NAME_CONVERT=’/standby/’,’/orcl/’
FAL_SERVER=standby
LOG_ARCHIVE_CONFIG=’DG_CONFIG=(orcl,farsync,standby)’
LOG_ARCHIVE_DEST_1=’LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl’
LOG_ARCHIVE_DEST_2=’SERVICE=farsync SYNC AFFIRM MAX_FAILURE=1 ALTERNATE=LOG_ARCHIVE_DEST_3 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=farsync’
LOG_ARCHIVE_DEST_STATE_3=’ALTERNATE’
LOG_ARCHIVE_DEST_3=’SERVICE=standby ASYNC ALTERNATE=LOG_ARCHIVE_DEST_2 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby’
#スタンバイサイト(dgnode2)

DB_UNIQUE_NAME=standby
CONTROL_FILES=’/u01/app/oracle/oradata/standby/control01.ctl’
DB_FILE_NAME_CONVERT=’/orcl/’,’/standby/’
LOG_FILE_NAME_CONVERT=’/orcl/’,’/standby/’
FAL_SERVER=’farsync’,’orcl’
LOG_ARCHIVE_CONFIG=’DG_CONFIG=(orcl,farsync,standby)’
LOG_ARCHIVE_DEST_1=’LOCATION= USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby’
LOG_ARCHIVE_DEST_2=’SERVICE=orcl ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl’
#遠隔同期サイト(dgnode3)

DB_UNIQUE_NAME=farsync
CONTROL_FILES=’/u01/app/oracle/oradata/farsync/control01.ctl’
DB_FILE_NAME_CONVERT=’/orcl/’,’/farsync/’,’/standby/’,’/farsync/’
LOG_FILE_NAME_CONVERT=’/orcl/’,’/farsync/’,’/standby/’,’/farsync/’
FAL_SERVER=orcl
LOG_ARCHIVE_CONFIG=’DG_CONFIG=(orcl,farsync,standby)’
LOG_ARCHIVE_DEST_1=’LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=farsync’
LOG_ARCHIVE_DEST_2=’SERVICE=standby ASYNC VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=standby’

 
3. プライマリサイトから 1. で作成した制御ファイルと遠隔同期サイト向けパラメータファイルを遠隔同期サイトにコピー
OSコマンドで、プライマリサイトから遠隔同期サイト向けに作成した初期化パラメータファイルを遠隔同期サイトにコピーします。
linux なので、scp コマンドで実施すると楽です。
 
4. プライマリサイトからパスワードファイルを遠隔同期サイトにコピー
OSコマンドで、プライマリサイトからパスワードファイルを遠隔同期サイトにコピーします。
linux なので、scp コマンドで実施すると(ry
 
5. pfile から spfile を作成
全サイトで、編集したpfileからspfileを作成します。以下は遠隔同期サイトでの実行例です。

#遠隔同期サイト(dgnode3)

SQL> startup nomount pfile=’?/dbs/initfarsync.ora’
ORACLEインスタンスが起動しました。
Total System Global Area 805306368 bytes
Fixed Size 2929552 bytes
Variable Size 318770288 bytes
Database Buffers 478150656 bytes
Redo Buffers 5455872 bytesSQL> create spfile from pfile=’?/dbs/initfarsync.ora’;
ファイルが作成されました。

 
6. ネットワークの設定(listener.ora/tnsnames.ora)
遠隔同期サイトで、Oracle Net Managerを使用して遠隔同期インスタンスのリスナーを
構成します。また、プライマリサイト、およびスタンバイサイトにて、
遠隔同期サイトへの接続情報をtnsnames.ora に追記しておきます。
 
7. 遠隔同期サイトでスタンバイREDOログファイル作成
遠隔同期サイトでスタンバイREDOログファイルを作成します。

#遠隔同期サイト(dgnode3)

SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 4 SIZE 50M;
データベースが変更されました。
SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 5 SIZE 50M;
データベースが変更されました。
SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 6 SIZE 50M;
データベースが変更されました。

 
8. マウントモードで遠隔同期インスタンスを起動
マウントモードで遠隔同期インスタンスを起動します。
スタンバイと同じく、オープンはできません。

#遠隔同期サイト(dgnode3)

SQL> startup mount
ORACLEインスタンスが起動しました。
Total System Global Area 805306368 bytes
Fixed Size 2929552 bytes
Variable Size 318770288 bytes
Database Buffers 478150656 bytes
Redo Buffers 5455872 bytes
データベースがマウントされました。
SQL>
SQL> select open_mode from v$database;
OPEN_MODE
——————–
MOUNTED

 
9. 動作確認
動作確認をしていきます。
遠隔同期サイトでは、データベースロールが「FAR SYNC」となっていること、
プライマリサイトでは、スタンバイサイト、遠隔同期サイトが正しく認識されていることを確認します。
また、各サイトのアラートログを確認し、問題なくREDOが転送できていることもご確認ください。

#遠隔同期サイト(dgnode3)

SQL> select database_role from v$database;
DATABASE_ROLE
—————-
FAR SYNC
#プライマリサイト(dgnode1)

DB_UNIQUE_NAME PARENT_DBUN DEST_ROLE CURRENT_SCN CON_ID
—————————— —————————— —————– ———– ———-
orcl      NONE    PRIMARY DATABASE 487243 0
farsync    orcl     FAR SYNC INSTANCE 485318 0
standby    farsync   PHYSICAL STANDBY 485318 0

 
 
以上、遠隔同期インスタンスの構築でした。
12cR1 ではこのような手動での構築が唯一の方法となりますが、
12cR2 からは、Enterprise Manager や DBCA(サイレントモード)での構築も可能となるそうです。

明日は、「だいきです。もぐめっとです。」さんです。
どうぞよろしくお願いいたします!

コメントは受け付けていません。