Oracle Data Guard Broker とは
Data Guard Broker とは Oracle Database Enterprise Edition の機能で、Data Guard の構成、管理、監視を自動化することができます。DMON バックグラウンド・プロセスが Data Guard の状態を監視し、必要な操作を自動的に行うことができます。
本記事では Data Guard Broker の初期設定と、状態を確認するところまでを記載しています。
環境
以下の環境を使って Data Guard Broker を構成します。
比較 | プライマリ | スタンバイ |
---|---|---|
OS | Red Hat Enterprise Linux 8 | Red Hat Enterprise Linux 8 |
ホスト名 | rel8-3 | rel8-4 |
データベース名(db_name) | O19A | O19A |
データベース一意名(db_unique_name) | O19A | O19S |
ドメイン名(db_domain) | '' | '' |
SID | O19A | O19S |
TNS接続名 | O19A | O19S |
Oracle Home | /opt/oracle/product/19.0.0/dbhome_1 | /opt/oracle/product/19.0.0/dbhome_1 |
プライマリ環境の構築
Data Guard Broker を設定する前にプライマリとして利用するデータベースを構築します。Data Guard 環境を構築するために以下のような最低限の設定が必要です。
- ARCHIVELOG モード
- アーカイブログ出力先(log_archive_dest_1 初期化パラメーター)
- データベースの FORCE LOGGING 設定
- FLASHBACK ログの設定(オプション)
初期化パラメーター dg_broker_config_file1, dg_broker_config_file2 に Data Guard Broker 設定ファイルのパスを設定します。デフォルト値では $ORACLE_HOME/dbs/dr#{DB_NAME}.dat が設定されています。このままでも良いのですが、Oracle Real Application Clusters のように複数ノードで稼働する環境の場合は共有ストレージに配置する必要があります。スタンバイ・データベースへ REDO 転送を行うための初期化パラメーター log_archive_dest_N の設定は現状では不要です(設定している場合は解除します)。
SQL> SHOW PARAMETER dg_broker_config_file
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dg_broker_config_file1 string /opt/oracle/product/19.0.0/dbhome_1/dbs/dr1O19A.dat
dg_broker_config_file2 string /opt/oracle/product/19.0.0/dbhome_1/dbs/dr2O19A.dat
スタンバイ環境の構築
Data Guard (Physical Standby) は制御ファイルはスタンバイ・データベースではスタンバイ用の制御ファイルを使用しますが、プライマリとスタンバイで同一のデータファイルを使用します。
プライマリ・データファイルのコピー
スタンバイ・データベースを構築する方法はいくつかありますが、RMAN の DUPLICATE コマンドを用いる方法が簡単です。
RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE NOFILENAMECHECK;
Duplicate Dbを25-04-18で開始しています
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_AUX_DISK_1が割り当てられました
チャネルORA_AUX_DISK_1: SID=391 デバイス・タイプ=DISK
メモリー・スクリプトの内容:
{
backup as copy reuse
passwordfile auxiliary format '/opt/oracle/product/19.0.0/dbhome_1/dbs/orapwO19S' ;
}
メモリー・スクリプトを実行しています
backupを25-04-18で開始しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=404 デバイス・タイプ=DISK
backupを25-04-18で終了しました
メモリー・スクリプトの内容:
{
sql clone "create spfile from memory";
shutdown clone immediate;
startup clone nomount;
restore clone from service 'O19A' standby controlfile;
}
メモリー・スクリプトを実行しています
<< 途中省略>>
データファイル1はデータファイル・コピーに切り替えられました
入力データファイル・コピー レコードID=7 スタンプ=1198765912 ファイル名=+DATA/O19S/DATAFILE/system.258.1198765851
データファイル2はデータファイル・コピーに切り替えられました
入力データファイル・コピー レコードID=8 スタンプ=1198765912 ファイル名=+DATA/O19S/DATAFILE/sysaux.257.1198765855
データファイル3はデータファイル・コピーに切り替えられました
入力データファイル・コピー レコードID=9 スタンプ=1198765912 ファイル名=+DATA/O19S/DATAFILE/undotbs1.259.1198765869
データファイル4はデータファイル・コピーに切り替えられました
入力データファイル・コピー レコードID=10 スタンプ=1198765912 ファイル名=+DATA/O19S/DATAFILE/users.269.1198765895
データファイル5はデータファイル・コピーに切り替えられました
入力データファイル・コピー レコードID=11 スタンプ=1198765912 ファイル名=+DATA/O19S/DATAFILE/users_auto1.270.1198765909
データファイル6はデータファイル・コピーに切り替えられました
入力データファイル・コピー レコードID=12 スタンプ=1198765912 ファイル名=+DATA/O19S/DATAFILE/users_uni1.271.1198765911
Duplicate Dbを25-04-18で終了しました
Grid Infrastructure への登録
スタンバイ・データベースはそのままでは Oracle Grid Infrastructure に認識されていませんので登録します。その際にスタンバイ・データベースであること(-role オプション)、起動オプション(-startoption オプション)を mount にすることを指定します(Active Data Guard 環境であれば open モード)。必要に応じてパスワード・ファイル、SPFILE も設定します。
$ srvctl add database -db O19S -oraclehome $ORACLE_HOME -role PHYSICAL_STANDBY -startoption mount -dbname O19A -policy AUTOMATIC
$
$ srvctl config database -db O19S
Database unique name: O19S
Database name: O19A
Oracle home: /opt/oracle/product/19.0.0/dbhome_1
Oracle user: oracle
Spfile:
Password file:
Domain:
Start options: mount
Stop options: immediate
Database role: PHYSICAL_STANDBY
Management policy: AUTOMATIC
Disk Groups:
Services:
OSDBA group:
OSOPER group:
Database instance: O19S
Data Guard Broker の設定
リスナーの設定
リスナーに「{DB_UNIQUE_NAME}_DGMGRL.{db_domain}」の名前の静的サービスを登録します。これは Data Guard Broker がリスナー経由でインスタンス再起動を行うために必要な設定です。プライマリ・データベース、スタンバイ・データベース双方で実行します。
$ lsnrctl status
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 21-4月 -2025 10:3 5:16
Copyright (c) 1991, 2021, Oracle. All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rel8-4)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名 LISTENER
バージョン TNSLSNR for Linux: Version 19.0.0.0.0 - Produ ction
開始日 21-4月 -2025 10:35:12
稼働時間 0 日 0 時間 0 分 3 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
パラメータ・ファイル /opt/grid/product/19.0.0/grid/network/admin/l istener.ora
ログ・ファイル /opt/grid/diag/tnslsnr/rel8-4/listener/alert /log.xml
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rel8-4)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
サービスのサマリー...
サービス"O19S_DGMGRL"には、1件のインスタンスがあります。
インスタンス"O19S"、状態UNKNOWNには、このサービスに対する1件のハンド ラがあります...
コマンドは正常に終了しました。
初期化パラメーターの設定
Data Guard Broker を起動するために、初期化パラメーター dg_broker_start を TRUE に設定します。この操作はプライマリ・データベース、スタンバイ・データベース双方で行います。DMON バックグラウンド・プロセスが起動します。
SQL> ALTER SYSTEM SET dg_broker_start=TRUE;
システムが変更されました。
SQL> SELECT pname FROM v$process WHERE pname LIKE 'DMON%';
PNAME
-----
DMON
Data Guard Broker の設定
dgmgrl コマンド実行し、Data Guard Broker の設定を行います。これはプライマリまたはスタンバイどちらかで実行します。起動できたら CONNECT サブコマンドでインスタンスへ接続します。dgmgrl コマンドの出力言語は環境変数 NLS_LANG に依存します。
$ dgmgrl
DGMGRL for Linux: Release 19.0.0.0.0 - Production on 月 4月 21 11:56:46 2025
Version 19.14.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
DGMGRLへようこそ。詳細は"help"と入力してください。
DGMGRL> CONNECT SYS/{パスワード}@O19A
"O19A"に接続しました
SYSDBAとして接続しました。
DGMGRL>
CREATE CONFIGURATION 文で Broker 定義を作成します。SHOW CONFIGURATION コマンドは設定の確認を行います。行末にセミコロン(;)は不要です。
DGMGRL> CREATE CONFIGURATION 'dg1_config' AS PRIMARY DATABASE IS 'O19A' CONNECT IDENTIFIER IS O19A;
構成"dg1_config"が、プライマリ・データベース"O19A"で作成されました
DGMGRL> SHOW CONFIGURATION
構成 - dg1_config
保護モード: MaxPerformance
メンバー:
O19A - プライマリ・データベース
ファスト・スタート・フェイルオーバー: Disabled
構成ステータス:
DISABLED
ADD DATABASE 文でスタンバイデータベースを追加します。
DGMGRL> ADD DATABASE 'O19S' AS CONNECT IDENTIFIER IS O19S MAINTAINED AS PHYSICAL;
データベース"O19S"が追加されました
DGMGRL> SHOW CONFIGURATION
構成 - dg1_config
保護モード: MaxPerformance
メンバー:
O19A - プライマリ・データベース
O19S - フィジカル・スタンバイ・データベース
ファスト・スタート・フェイルオーバー: Disabled
構成ステータス:
DISABLED
Broker を有効化します。
DGMGRL> ENABLE CONFIGURATION
有効になりました。
DGMGRL> SHOW CONFIGURATION
構成 - dg1_config
保護モード: MaxPerformance
メンバー:
O19A - プライマリ・データベース
O19S - フィジカル・スタンバイ・データベース
ファスト・スタート・フェイルオーバー: Disabled
構成ステータス:
SUCCESS
スタンバイREDOログの追加
スタンバイREDOログファイルは自動追加されません。あらかじめ作成しておきます。Data Guard Broker 設定の起動後にスタンバイREDOログを追加すると、エラーORA-01156 が発生します。
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5('+REDO1','+REDO2') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5('+REDO1','+REDO2') SIZE 200M
*
行1でエラーが発生しました。:
ORA-01156:
現在処理中のリカバリまたはフラッシュバックで、ファイルのアクセスを必要とする可能
性があります
この場合は REDO 適用を一時停止(SET STATE='APPLY-OFF')してからスタンバイREDOを追加し、REDO 適用を再開します。
DGMGRL> EDIT DATABASE 'O19S' SET STATE='APPLY-OFF';
成功しました。
--- スタンバイ REDO の追加
DGMGRL> EDIT DATABASE 'O19S' SET STATE='APPLY-ON';
成功しました。
SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 5 ('+REDO1', '+REDO2') SIZE 2000M;
データベースが変更されました。
詳細の確認
Broker 設定の確認
上記の例で実行した SHOW CONFIGURATION オプションには REDO ラグの情報(LAG)と詳細情報(VERBOSE)を追加指定できます。
DGMGRL> SHOW CONFIGURATION LAG VERBOSE
構成 - dg1_config
保護モード: MaxPerformance
メンバー:
O19A - プライマリ・データベース
O19S - フィジカル・スタンバイ・データベース
トランスポート・ラグ: 0 秒 (0秒前に計算されました)
適用ラグ: 0 秒 (0秒前に計算されました)
プロパティ:
FastStartFailoverThreshold = '30'
OperationTimeout = '30'
TraceLevel = 'USER'
FastStartFailoverLagLimit = '30'
CommunicationTimeout = '180'
ObserverReconnect = '0'
FastStartFailoverAutoReinstate = 'TRUE'
FastStartFailoverPmyShutdown = 'TRUE'
BystandersFollowRoleChange = 'ALL'
ObserverOverride = 'FALSE'
ExternalDestination1 = ''
ExternalDestination2 = ''
PrimaryLostWriteAction = 'CONTINUE'
ConfigurationWideServiceName = 'O19A_CFG'
ファスト・スタート・フェイルオーバー: Disabled
構成ステータス:
SUCCESS
データベースの確認
VALIDATE DATABASE 文を実行するとデータベースの状態を確認できます。VERBOSE オプションを追加すると詳細が出力されます。
DGMGRL> VALIDATE DATABASE VERBOSE 'O19A';
データベース・ロール: プライマリ・データベース
スイッチオーバー可能: はい
フラッシュバック・データベースのステータス:
O19A: オフ
容量の情報:
データベース インスタンス スレッド
O19A 1 1
クラスタウェアにより管理される:
O19A: YES
一時的な表領域ファイルの情報:
O19A TEMPファイル: 1
データ・ファイルをオンラインで移動中:
O19A: いいえ
転送関連の情報:
転送する: はい
クリアされたログ・ファイル:
O19A スタンバイREDOログ・ファイル: クリアされました
DGMGRL> VALIDATE DATABASE VERBOSE 'O19S';
データベース・ロール: フィジカル・スタンバイ・データベース
プライマリ・データベース: O19A
スイッチオーバー可能: はい
フェイルオーバー可能: はい (プライマリ実行中)
フラッシュバック・データベースのステータス:
O19A: オフ
O19S: オフ
容量の情報:
データベース インスタンス スレッド
O19A 1 1
O19S 1 1
クラスタウェアにより管理される:
O19A: YES
O19S: YES
一時的な表領域ファイルの情報:
O19A TEMPファイル: 1
O19S TEMPファイル: 1
データ・ファイルをオンラインで移動中:
O19A: いいえ
O19S: いいえ
スタンバイ適用関連の情報:
適用状態: 実行中
適用ラグ: 0 秒 (0秒前に計算されました)
遅延の適用: 0 分
転送関連の情報:
転送する: はい
ギャップのステータス: ギャップはありません
トランスポート・ラグ: 0 秒 (0秒前に計算されました)
転送ステータス: 成功
クリアされたログ・ファイル:
O19A スタンバイREDOログ・ファイル: クリアされました
O19S オンラインREDOログ・ファイル: クリアされました
O19S スタンバイREDOログ・ファイル: 使用可能
現在のログ・ファイル・グループの構成:
スレッド番号オンラインREDOログ・グループスタンバイREDOログ・グループステータス
(O19A) (O19S)
1 4 5 十分なSRL
今後のログ・ファイル・グループの構成:
スレッド番号オンラインREDOログ・グループスタンバイREDOログ・グループステータス
(O19S) (O19A)
1 4 5 十分なSRL
現在の構成ログ・ファイルのサイズ:
スレッド番号 最小のオンラインREDO 最小のスタンバイREDO
ログ・ファイル・サイズ ログ・ファイル・サイズ
(O19A) (O19S)
1 200 MBytes 200 MBytes
今後の構成ログ・ファイルのサイズ:
スレッド番号 最小のオンラインREDO 最小のスタンバイREDO
ログ・ファイル・サイズ ログ・ファイル・サイズ
(O19S) (O19A)
1 200 MBytes 200 MBytes
適用関連のプロパティ設定:
プロパティ O19A 値 O19S 値
DelayMins 0 0
ApplyParallel AUTO AUTO
ApplyInstances 0 0
転送関連のプロパティ設定:
プロパティ O19A 値 O19S 値
LogShipping ON ON
LogXptMode ASYNC ASYNC
Dependency <empty> <empty>
DelayMins 0 0
Binding optional optional
MaxFailure 0 0
ReopenSecs 300 300
NetTimeout 30 30
RedoCompression DISABLE DISABLE
Author: Noriyoshi Shinoda / Date: April 21, 2025