LoginSignup
6
6

More than 5 years have passed since last update.

Oracle DataGuard Brokerの設定手順

Last updated at Posted at 2015-05-16

内容

フィジカルスタンバイのDataGuardにBrokerを設定した時の手順メモ

構成

構成は以下の通り。

項目 プライマリ スタンバイ
Hostname dg01 dg02
OS Red Hat Enterprise Linux 6.4 Red Hat Enterprise Linux 6.4
Oracleバージョン 11g Enterprise Edition 11.2.0.4.0 11g Enterprise Edition 11.2.0.4.0
ORACLE_BASE /u01/app/oracle /u01/app/oracle
ORACLE_HOME /u01/app/oracle/product/11.2.0/dbhome_1 /u01/app/oracle/product/11.2.0/dbhome_1
ORACLE_SID PRIDB SBYDB
DB_NAME DGTEST DGTEST
DB_UNIQUE_NAME PRIDB SBYDB
DB_DOMAIN - -
Net Service Name PRIDBTNS SBYDBTNS

手順

1. Broker設定ファイルの設定

DG_BROKER_CONFIG_FILEn初期化パラメータを設定する。
今回は以下を設定する。

[プライマリ]
/u01/app/oracle/oradata/PRIDB/dr1PRIDB.dat
/u01/app/oracle/oradata/PRIDB/dr2PRIDB.dat
[スタンバイ]
/u01/app/oracle/oradata/SBYDB/dr1SBYDB.dat
/u01/app/oracle/oradata/SBYDB/dr2SBYDB.dat

[プライマリ]

SQL> show parameter dg_broker_config_file
PARAMETER_NAME          TYPE      VALUE
----------------------- --------- ---------------------------------------------------------
dg_broker_config_file1  string    /u01/app/oracle/product/11.2.0/dbhome_1/dbs/dr1PRIDB.dat
dg_broker_config_file2  string    /u01/app/oracle/product/11.2.0/dbhome_1/dbs/dr2PRIDB.dat

SQL> alter system set dg_broker_config_file1='/u01/app/oracle/oradata/PRIDB/dr1PRIDB.dat';

システムが変更されました。

SQL> alter system set dg_broker_config_file2='/u01/app/oracle/oradata/PRIDB/dr2PRIDB.dat';

システムが変更されました。

SQL> show parameter dg_broker_config_file
PARAMETER_NAME          TYPE      VALUE
----------------------- --------- ---------------------------------------------------------
dg_broker_config_file1  string    /u01/app/oracle/oradata/PRIDB/dr1PRIDB.dat
dg_broker_config_file2  string    /u01/app/oracle/oradata/PRIDB/dr2PRIDB.dat

[スタンバイ]

SQL> show parameter dg_broker_config_file
PARAMETER_NAME          TYPE      VALUE
----------------------- --------- ----------------------------------------------------------
dg_broker_config_file1  string    /u01/app/oracle/product/11.2.0/dbhome_1/dbs/dr1SBYDB.dat
dg_broker_config_file2  string    /u01/app/oracle/product/11.2.0/dbhome_1/dbs/dr2SBYDB.dat

SQL> alter system set dg_broker_config_file1='/u01/app/oracle/oradata/SBYDB/dr1SBYDB.dat';
システムが変更されました。

SQL> alter system set dg_broker_config_file2='/u01/app/oracle/oradata/SBYDB/dr2SBYDB.dat';
システムが変更されました。

SQL> show parameter dg_broker_config_file

PARAMETER_NAME          TYPE      VALUE
----------------------- --------- ---------------------------------------------------------
dg_broker_config_file1  string    /u01/app/oracle/oradata/SBYDB/dr1SBYDB.dat
dg_broker_config_file2  string    /u01/app/oracle/oradata/SBYDB/dr2SBYDB.dat

2. Brokerプロセス(DMON)の起動

DG_BROKER_START初期化パラメータを「TRUE」に設定し、Brokerプロセス(DMON)を立ち上げる。

[プライマリ/スタンバイ]

SQL> select pname from v$process where pname like 'DMON%';
レコードが選択されませんでした。
-- 以下でも可
-- !ps -ef | grep ora_dmon_ | grep -v grep


SQL> show parameter dg_broker_start
PARAMETER_NAME                               TYPE      VALUE
-------------------------------------------- --------- ------
dg_broker_start                              boolean   FALSE

SQL> alter system set dg_broker_start=true;
システムが変更されました。

SQL> show parameter dg_broker_start
PARAMETER_NAME                               TYPE      VALUE
-------------------------------------------- --------- ------
dg_broker_start                              boolean   TRUE

SQL> select pname from v$process where pname like 'DMON%';
PNAME
---------------
DMON

3. リスナーにDataGuard用静的サービスを登録

listener.oraに「GLOBAL_DBNAME=db_unique_name_DGMGRL.db_domain」静的サービスを登録する。

db_unique_name_DGMGRL.db_domainは、dgmgrlがDB接続に使用するサービス名のデフォルト値。
以下の処理を行うため登録する。
- dgmgrlがインスタンスを再起動できるようにする。
- ファスト・スタート・フェイルオーバーが発生した後、元のプライマリ・データベースの
自動回復の一部としてオブザーバーがインスタンスを再起動できるようにする。

[プライマリ]

/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# 以下の通りに修正
-------------------------------------
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = dg01)(PORT = 1521))
    )
  )

SID_LIST_LISTENER=
  (SID_LIST=
    (SID_DESC=
      (GLOBAL_DBNAME=PRIDB)
      (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME=PRIDB)
    )
# -- 追加 START ------------------------------------------------
    (SID_DESC=
      (GLOBAL_DBNAME=PRIDB_DGMGRL)
      (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME=PRIDB)
    )
# -- 追加 END --------------------------------------------------
  )
-------------------------------------

[スタンバイ]

/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# 以下の通りに修正
-------------------------------------
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = dg02)(PORT = 1521))
    )
  )

SID_LIST_LISTENER=
  (SID_LIST=
    (SID_DESC=
      (GLOBAL_DBNAME=SBYDB)
      (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME=SBYDB)
    )
# -- 追加 START ------------------------------------------------
    (SID_DESC=
      (GLOBAL_DBNAME=SBYDB_DGMGRL)
      (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME=SBYDB)
    )
# -- 追加 END --------------------------------------------------
  )
-------------------------------------

[プライマリ/スタンバイ]
リスナーの設定再読込、接続確認

$ # 設定再読込
$ lsnrctl reload
$ lsnrctl stat
$ # 接続確認
$ echo exit | sqlplus sys/<パスワード>@PRIDBTNS as sysdba | grep 'ORA-' | wc -l
$ echo exit | sqlplus sys/<パスワード>@dg01:1521/PRIDB as sysdba | grep 'ORA-' | wc -l
$ echo exit | sqlplus sys/<パスワード>@dg01:1521/PRIDB_DGMGRL as sysdba | grep 'ORA-' | wc -l
$ echo exit | sqlplus sys/<パスワード>@SBYDBTNS as sysdba | grep 'ORA-' | wc -l
$ echo exit | sqlplus sys/<パスワード>@dg02:1521/SBYDB as sysdba | grep 'ORA-' | wc -l
$ echo exit | sqlplus sys/<パスワード>@dg02:1521/SBYDB_DGMGRL as sysdba | grep 'ORA-' | wc -l

4. DataGuard構成の登録

dgmgrlを使用し、broker設定ファイル作成・有効化を実施する。

[プライマリ or スタンバイ]

  • dgmgrlに接続
$ dgmgrl
DGMGRL> connect sys/<sysのパスワード>@pridbtns
接続されました。
  • 設定ファイルの作成
DGMGRL> CREATE CONFIGURATION 'dgtest_config' AS PRIMARY DATABASE IS 'PRIDB' CONNECT IDENTIFIER IS PRIDBTNS;
構成"dgtest_config"が、プライマリ・データベース"PRIDB"で作成されました

# CREATE CONFIGURATION '<設定ファイル名(自分で決める)>' AS 
# PRIMARY DATABASE IS '<プライマリのDB_UNIQUE_NAME初期化パラメータ>' 
# CONNECT IDENTIFIER IS <プライマリに接続するためのTNS名>;

DGMGRL> show configuration

構成 - dgtest_config

  保護モード: MaxPerformance
  データベース:
    PRIDB - プライマリ・データベース

ファスト・スタート・フェイルオーバー: DISABLED

構成ステータス:
DISABLED
  • 設定ファイルにスタンバイ機を追加
DGMGRL> ADD DATABASE 'SBYDB' AS CONNECT IDENTIFIER IS SBYDBTNS MAINTAINED AS PHYSICAL;
データベース"SBYDB"が追加されました

DGMGRL> show configuration;

構成 - dgtest_config

  保護モード: MaxPerformance
  データベース:
    PRIDB - プライマリ・データベース
    SBYDB - フィジカル・スタンバイ・データベース

ファスト・スタート・フェイルオーバー: DISABLED

構成ステータス:
DISABLED
  • 設定ファイルの有効化
DGMGRL> enable configuration;
有効になりました。
DGMGRL> show configuration;

構成 - dgtest_config

  保護モード: MaxPerformance
  データベース:
    PRIDB - プライマリ・データベース
    SBYDB - フィジカル・スタンバイ・データベース

ファスト・スタート・フェイルオーバー: DISABLED

構成ステータス:
SUCCESS

5. スイッチオーバーの動作確認

スイッチオーバーが正常に動作することを確認する。
[プライマリ or スタンバイ]

DGMGRL> switchover to 'SBYDB'
現在スイッチオーバーを実行しています。お待ちください...
操作上、インスタンス"SBYDB" (データベース"SBYDB") に接続する必要があります
インスタンス"SBYDB"に接続中...
接続されました。
新しいプライマリ・データベース"SBYDB"がオープン中です...
操作上、インスタンス"PRIDB" (データベース"PRIDB") を起動する必要があります
インスタンス"PRIDB"の起動中...
ORACLEインスタンスが起動しました。
データベースがマウントされました。
スイッチオーバーに成功しました。新しいプライマリは"SBYDB"です

DGMGRL> show configuration;

構成 - dgtest_config

  保護モード: MaxPerformance
  データベース:
    SBYDB - プライマリ・データベース
    PRIDB - フィジカル・スタンバイ・データベース

ファスト・スタート・フェイルオーバー: DISABLED

構成ステータス:
SUCCESS

メモ

ブローカログファイル
アラートログと同じディレクトリに、drc<$ORACLE_SID>.logで作成される。今回は以下になる。

[プライマリ]
/u01/app/oracle/diag/rdbms/sbydb/PRIDB/trace/drcPRIDB.log
[スタンバイ]
/u01/app/oracle/diag/rdbms/sbydb/SBYDB/trace/drcSBYDB.log

dgmgrlがDB接続に使用する接続文字列の確認
設定値の確認

DGMGRL> SHOW DATABASE VERBOSE 'PRIDB' StaticConnectIdentifier;
  StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dg01)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PRIDB_DGMGRL)(INSTANCE_NAME=PRIDB)(SERVER=DEDICATED)))'
DGMGRL> SHOW DATABASE VERBOSE 'SBYDB' StaticConnectIdentifier;
  StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dg02)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=SBYDB_DGMGRL)(INSTANCE_NAME=SBYDB)(SERVER=DEDICATED)))'

接続確認

sqlplus 'sys/<パスワード>@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dg01)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PRIDB_DGMGRL)(INSTANCE_NAME=PRIDB)(SERVER=DEDICATED)))' as sysdba
sqlplus 'sys/<パスワード>@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dg02)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=SBYDB_DGMGRL)(INSTANCE_NAME=SBYDB)(SERVER=DEDICATED)))' as sysdba

ORA-16810の詳細確認
「Error: ORA-16810: データベースについて複数のエラーまたは警告が検出されました」が表示される場合、以下のコマンドで詳細を確認

DGMGRL> SHOW DATABASE '<データベース名>' 'StatusReport';

ORA-01017
「ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。」が発生した場合、以下を確認する。

  • tnsname.oraの内容
  • パスワードファイル
  • tnspingによる疎通確認
  • sqlplusによるログイン確認

ORA-16816

ORA-16816が発生し、プライマリのデータベースが「standby」になってしまった場合、「ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;」で「primary」に戻す。

ORA-16816: データベース・ロールが正しくありません。
http://docs.oracle.com/cd/E16338_01/server.112/b56318/e12700.htm#sthref3729

原因:
Data Guard Broker構成内に記録されたデータベース・ロールとは異なるデータベース・ロールが指定の
データベースに含まれていることがData Guard Brokerによって検出されました。この状況は、スイッチ
オーバー操作またはフェイルオーバー操作に失敗したことによって発生したか、またはSQL*Plusを使用し
てスイッチオーバー操作またはフェイルオーバー操作を実行したことによって発生した可能性があります。

処置:
Data Guard Brokerのドキュメントを参照して、ロール変更操作の失敗からリカバリする方法を確認するか、
Data Guard Brokerによって管理されているデータベースでSQL*Plusを使用して実行されたロール変更から
リカバリする方法を確認してください。

現象

DGMGRL> show configuration

構成 - dgtest_config

保護モード: MaxPerformance
データベース:
PRIDB - プライマリ・データベース
  エラー: ORA-16816: データベース・ロールが正しくありません

SBYDB - フィジカル・スタンバイ・データベース
  警告: ORA-16857: スタンバイがREDOソースから切断されている時間が指定されたしきい値を超えています

ファスト・スタート・フェイルオーバー: DISABLED

構成ステータス:
ERROR

対応

SQL> -- プライマリに戻すことができるか確認
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
------------------------------------------------------------
TO PRIMARY

SQL> -- プライマリに戻す。
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
データベースが変更されました。  

SQL> -- 確認
SQL> SELECT open_mode,database_role, SWITCHOVER_STATUS FROM V$DATABASE;
OPEN_MODE   DATABASE_ROLE    SWITCHOVER_STATUS
----------- ---------------- -----------------
MOUNTED     PRIMARY          TO STANDBY

SQL> alter database open;
データベースが変更されました。

リファレンス

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6