Oracle Data Guard Broker は、Oracle Data Guard構成の作成、メンテナンスおよび監視を自動化および集中化する分散管理フレームワークです。
RedoRoutesプロパティを使用してREDO転送を制御することができ、Standby Databaseが複数ある場合、次の様なREDO転送制御トポロジーが考えられるのでやってみてみます。
■ 構成イメージ
■ 事前作業
2つ以上の Standby Database構成は オンプレミス同様にコマンドで Data Guard作成する必要があります。次を参考に Oracle Exadata もしくは、Oracle Database Cloud Service を使用して複数スタンバイ構成を作成しておきます。
・参考:
- Oracle Exadata Database Service: 手動コマンドで Active Data Guard を構成
- Oracle Database Data Guard 複数スタンバイ構成
■ 1:n Standby構成(デフォルト)
この構成は、デフォルトです。
Primary Database から、すべての Standby Database へ REDOを送信します。
Switchoverした CDB_TOKYO 以外の Primary Database も同様に Standby Database へ REDOを送信します。
● 設定例
RedoRoutesプロパティのデフォルト値はNULLです。プライマリ・データベースは、(LOCAL : ALL)として扱われます。
DGMGRL> EDIT DATABASE 'CDB_TOKYO' SET PROPERTY 'RedoRoutes' = '';
DGMGRL> EDIT DATABASE 'CDB_SHIBUYA' SET PROPERTY 'RedoRoutes' = '';
DGMGRL> EDIT DATABASE 'CDB_OSAKA' SET PROPERTY 'RedoRoutes' = '';
DGMGRL> EDIT DATABASE 'CDB_NAMBA' SET PROPERTY 'RedoRoutes' = '';
■ Primary 負荷考慮: Standby Cascade REDO転送構成
Primary負荷考慮構成です。
Primaryから全ての Standby Database に REDO を送信するかわりに、近接の Standby Database からその他の 遠隔の スタンバイ・データベースに REDOを転送するように リアルタイム・カスケードを構成することができます。
また、REDOデータの受信元のメンバーに障害が発生しても REDOデータを受信できるように、リモート代替宛先を設定することもできます。
● REDO送信イメージ
1) CDB_TOKYO が Primary の場合
近接CDB_SHIBUYA から他の Remote Standby へ REDO送信
・ CDB_TOKYO[Primary]
---(SYNC)---> CDB_SHIBUYA[Standby]
---(ASYNC)---> CDB_OSAKA[Cascade]
---(ASYNC)---> CDB_NAMBA[Cascade]
2) CDB_SHIBUYA が Primary の場合
近接CDB_TOKYO から他の Remote Standby へ REDO送信
・ CDB_SHIBUYA[Primary]
---(SYNC)---> CDB_TOKYO[Standby]
---(ASYNC)---> CDB_OSAKA[Cascade]
---(ASYNC)---> CDB_NAMBA[Cascade]
3) CDB_OSAKA が Primary の場合
近接CDB_NAMBA から他の Remote Standby へ REDO送信
・ CDB_OSAKA[Primary]
---(SYNC)---> CDB_NAMBA[Standby]
---(ASYNC)---> CDB_TOKYO[Cascade]
---(ASYNC)---> CDB_SHIBUYA[Cascade]
4) CDB_NAMBA が Primary の場合
近接CDB_OSAKA から他の Remote Standby へ REDO送信
・ CDB_NAMBA[Primary]
---(SYNC)---> CDB_OSAKA[Standby]
---(ASYNC)---> CDB_TOKYO[Cascade]
---(ASYNC)---> CDB_SHIBUYA[Cascade]
● DGMGRL RedoRoutes設定例
各リモートDatabase が Primary なった場合をまとめて設定すると次の様になります。
DGMGRL> EDIT DATABASE 'CDB_TOKYO' SET PROPERTY 'RedoRoutes' = '(LOCAL : CDB_SHIBUYA ASYNC)(CDB_SHIBUYA : (CDB_OSAKA ASYNC, CDB_NAMBA ASYNC))';
DGMGRL> EDIT DATABASE 'CDB_SHIBUYA' SET PROPERTY 'RedoRoutes' = '(LOCAL : CDB_TOKYO ASYNC)(CDB_TOKYO : (CDB_OSAKA ASYNC, CDB_NAMBA ASYNC))';
DGMGRL> EDIT DATABASE 'CDB_OSAKA' SET PROPERTY 'RedoRoutes' = '(LOCAL : CDB_NAMBA ASYNC)(CDB_NAMBA : (CDB_TOKYO ASYNC, CDB_SHIBUYA ASYNC))';
DGMGRL> EDIT DATABASE 'CDB_NAMBA' SET PROPERTY 'RedoRoutes' = '(LOCAL : CDB_OSAKA ASYNC)(CDB_OSAKA : (CDB_TOKYO ASYNC, CDB_SHIBUYA ASYNC))';
● 動作確認
1) CDB_TOKYO が Primary の場合
DGMGRL> switchover to CDB_TOKYO
Performing switchover NOW, please wait...
New primary database "CDB_TOKYO" is opening...
Oracle Clusterware is restarting database "CDB_NAMBA" ...
Connected to "CDB_NAMBA"
Connected to "CDB_NAMBA"
Switchover succeeded, new primary is "cdb_tokyo"
DGMGRL> show configuration;
Configuration - dg_config
Protection Mode: MaxPerformance
Members:
CDB_TOKYO - Primary database
CDB_SHIBUYA - Physical standby database
CCDB_OSAKA - Physical standby database (receiving current redo)
CCDB_NAMBA - Physical standby database (receiving current redo)
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 46 seconds ago)
2) CDB_SHIBUYA が Primary の場合
DGMGRL> switchover to CDB_SHIBUYA
Performing switchover NOW, please wait...
Operation requires a connection to database "CDB_SHIBUYA"
Connecting ...
Connected to "CDB_SHIBUYA"
Connected as SYSDBA.
New primary database "CDB_SHIBUYA" is opening...
Oracle Clusterware is restarting database "CDB_TOKYO" ...
Connected to "CDB_TOKYO"
Connected to "CDB_TOKYO"
Switchover succeeded, new primary is "cdb_shibuya"
DGMGRL> show configuration;
DGMGRL> show configuration;
Configuration - dg_config
Protection Mode: MaxPerformance
Members:
CDB_SHIBUYA - Primary database
CDB_TOKYO - Physical standby database
CDB_OSAKA - Physical standby database (receiving current redo)
CDB_NAMBA - Physical standby database (receiving current redo)
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 39 seconds ago)
3) CDB_OSAKA が Primary の場合
DGMGRL> switchover to CDB_OSAKA
Performing switchover NOW, please wait...
New primary database "CDB_OSAKA" is opening...
Oracle Clusterware is restarting database "CDB_SHIBUYA" ...
Connected to "CDB_SHIBUYA"
Connected to "CDB_SHIBUYA"
Switchover succeeded, new primary is "cdb_osaka"
DGMGRL> show configuration;
Configuration - dg_config
Protection Mode: MaxPerformance
Members:
CDB_OSAKA - Primary database
CDB_NAMBA - Physical standby database
CDB_TOKYO - Physical standby database (receiving current redo)
CDB_SHIBUYA - Physical standby database (receiving current redo)
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 24 seconds ago)
4) CDB_NAMBA が Primary の場合
DGMGRL> switchover to CDB_NAMBA
Performing switchover NOW, please wait...
New primary database "CDB_NAMBA" is opening...
Oracle Clusterware is restarting database "CDB_OSAKA" ...
Connected to "CDB_OSAKA"
Connected to "CDB_OSAKA"
Switchover succeeded, new primary is "cdb_namba"
DGMGRL> show configuration;
Configuration - dg_config
Protection Mode: MaxPerformance
Members:
CDB_NAMBA - Primary database
CDB_OSAKA - Physical standby database
CDB_TOKYO - Physical standby database (receiving current redo)
CDB_SHIBUYA - Physical standby database (receiving current redo)
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 57 seconds ago)
■ REDO転送トポロジー設計構成
Local Standby は Primaryとして使用せず、CDB_TOKYOとCDB_OSAKAのみPrimaryとなる構成を考えてみます。
● REDO送信イメージ
・ CDB_TOKYO が Primaryの場合
近接CDB_SHIBUYA から他の Remote Standby へ REDO送信
・ CDB_TOKYO[Primary]
---(SYNC)---> CDB_SHIBUYA[Standby]
---(ASYNC)---> CDB_OSAKA[Standby]
---(ASYNC)---> CDB_NAMBA[Cascade]
・ CDB_OSAKA が Primaryの場合
近接CDB_NAMBA から他の Remote Standby へ REDO送信
・ CDB_OSAKA[Primary]
---(SYNC)---> CDB_NAMBA[Standby]
---(ASYNC)---> CDB_TOKYO[Standby]
---(ASYNC)---> CDB_SHIBUYA[Cascade]
● DGMGRL RedoRoutes設定例
各リモートDatabase が Primary なった場合、Pattern#1Bの代変宛先を考慮してまとめて設定すると次の様になります。
DGMGRL> EDIT DATABASE 'CDB_TOKYO' SET PROPERTY 'RedoRoutes' = '(LOCAL : (CDB_SHIBUYA ASYNC, CDB_OSAKA ASYNC))(CDB_OSAKA : CDB_SHIBUYA ASYNC)';
DGMGRL> EDIT DATABASE 'CDB_OSAKA' SET PROPERTY 'RedoRoutes' = '(CDB_TOKYO : CDB_NAMBA ASYNC)(LOCAL : (CDB_NAMBA ASYNC, CDB_TOKYO ASYNC))';
● 動作確認
1) CDB_TOKYO が Primary の場合
DGMGRL> switchover to CDB_TOKYO
Performing switchover NOW, please wait...
New primary database "CDB_TOKYO" is opening...
Oracle Clusterware is restarting database "CDB_NAMBA" ...
Connected to "CDB_NAMBA"
Connected to "CDB_NAMBA"
Switchover succeeded, new primary is "cdb_tokyo"
DGMGRL> show configuration
Configuration - dg_config
Protection Mode: MaxPerformance
Members:
CDB_TOKYO - Primary database
CDB_SHIBUYA - Physical standby database
CDB_OSAKA - Physical standby database
CDB_NAMBA - Physical standby database (receiving current redo)
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 7 seconds ago)
2) CDB_OSAKA が Primary の場合
DGMGRL> switchover to CDB_OSAKA
Performing switchover NOW, please wait...
Operation requires a connection to database "CDB_OSAKA"
Connecting ...
Connected to "CDB_OSAKA"
Connected as SYSDBA.
New primary database "CDB_OSAKA" is opening...
Oracle Clusterware is restarting database "CDB_TOKYO" ...
Connected to "CDB_TOKYO"
Connected to "CDB_TOKYO"
Switchover succeeded, new primary is "cdb_osaka"
DGMGRL> show configuration
Configuration - dg_config
Protection Mode: MaxPerformance
Members:
CDB_OSAKA - Primary database
CDB_NAMBA - Physical standby database
CDB_TOKYO - Physical standby database
CDB_SHIBUYA - Physical standby database (receiving current redo)
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 43 seconds ago)
■ その他: 優先順位制御
PRIORITY=n を設定することで、 PRIORITY=1 が設定されている Standby#1 が使用できない場合、プライマリはPRIORITY=2が設定されている Standby#2 に送信することができます。
端末メンバーがREDOデータの受信元のメンバーに障害が発生してもREDOデータを受信できるように、リモート代替宛先を設定することもできます。前述の例を使用すると、プライマリ・データベースとしてCDB_TOKYO を使用し、スタンバイ・データベースCDB_SHIBUYA に障害が発生したときにREDOデータを直接CDB_OSAKA に送信できます。PRIORITY属性を使用して、CDB_SHIBUYAの障害が解決された時点でCDB_OSAKA へのREDOの送信を再開できるように設定することもできます。
DGMGRL> EDIT DATABASE 'CDB_TOKYO' SET PROPERTY 'RedoRoutes' = '(LOCAL : ( CDB_SIBUYA ASYNC PRIORITY=1, CDB_OSAKA ASYNC PRIORITY=2 ))';
DGMGRL> EDIT DATABASE 'CDB_SIBUYA' SET PROPERTY 'RedoRoutes' = '(CDB_OSAKA : Remote_Sales ASYNC)';
■ 参考
● Data Guard
・Data Guard
・Oracle Exadata Cloudを使用した ディザスタ・リカバリ
・Hybrid Data Guard to Exadata Cloud Services
・Solution Playbooks: Deploy a hybrid DR topology for an on-premises Oracle Exadata
● Data Guard Broker
・マニュアル: Oracle Data Guard Broker
・Oracle Data Guardのベスト・プラクティス
● Exadata
・概要: Oracle Exadata Database Service
・キュメント: Exadataシステム
・キュメント: DBAASツール: dbaascliを使用したクラウド・ツール・ログの収集およびクラウド・ツールの ヘルス・チェックの実行
・Oracle Database Product Management
● Private DNS
・キュメント: OCI Document:プライベートDNS
・チュートリアル: Private DNS Implementation
● Oracle Cloud:Maximum Availability Architecture (MAA)
・Oracle CloudのMAAベスト・プラクティス まとめ
・Oracle WebLogic Server for Oracle Cloud Infrastructureの障害時リカバリ
・Oracle Cloud Infrastructure Marketplace上のSOA Suiteの障害時リカバリ
● Qiitaまとめ
・ DRGで東京リージョンを経由して、オンプレミスと 大阪リージョンを接続
・ Oracle Exadata Cloud Infrastructure X9M作成
・Oracle Cloud: Real Application Clusters(RAC)作成
・ リージョン間を Remote VCN Peering接続
・ Private DNSで PeeringしたVCNどうしホスト名解決する
・ クラウド・ツール dbaascliをバージョンアップ