内容
フィジカルスタンバイの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がインスタンスを再起動できるようにする。
- ファスト・スタート・フェイルオーバーが発生した後、元のプライマリ・データベースの
自動回復の一部としてオブザーバーがインスタンスを再起動できるようにする。
[プライマリ]
# 以下の通りに修正
-------------------------------------
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 --------------------------------------------------
)
-------------------------------------
[スタンバイ]
# 以下の通りに修正
-------------------------------------
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;
データベースが変更されました。
リファレンス
-
Sun Cluster Geographic Edition Data Replication Guide for Oracle Data Guard
https://docs.oracle.com/cd/E19421-01/820-5016/fnrfv/index.html -
Oracle Technologies Blog By ASKM
Creating A Dataguard Broker Configuration Using DGMGRL
https://learnwithme11g.wordpress.com/tag/dg_broker_start/ -
Data Guard:フィジカル・スタンバイ・データベースへのスイッチオーバー(11g)
http://oracle-pub.wikidot.com/11g-ocm-dg-phy-stb-switchover -
DGMGRLコマンドライン・インタフェースの使用例
http://docs.oracle.com/cd/E16338_01/server.112/b56304/cli.htm -
Data Guardのトラブルシューティング
http://docs.oracle.com/cd/E16338_01/server.112/b56302/troubleshooting.htm#i634208