20
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle Exadata AI Database@Azure: Active Data Guard で DR 構成をしてみてみた

20
Last updated at Posted at 2026-03-30

イメージ画像02.png
Oracle AI Database@Azure で Exadata を 2 系統用意できたら、次にやりたくなるのはやはり Active Data Guard です。 ただ、実際に運用を考えると、Standby を作るだけでは足りません。Switchover / Failover / Reinstate が正しく動くこと、接続先サービスをロールに応じて切り替えられること、さらにアプリケーション側から見た継続性まで考えておきたいです。

Oracle Active Data Guard を使用することで、エンタープライズ データの高可用性、データ保護、および災害復旧を保証します。計画的または計画外の停止のために本番データベースが使用できなくなった場合、スタンバイ・データベースをプライマリ・ロールに切り替えて、ダウンタイムを最小限に抑えることができます。
また、Oracle Data Guard を使用すると、管理者はオプションで、リソースを大量に消費するDWHレポート処理や検証作業をスタンバイ システムにオフロードすることで、本番データベースのパフォーマンスを向上させることができます。

Active Data Guard の機能にはつぎのものがあります。

  • 複数のスタンバイ・データベースの障害時リカバリ
    稼動中のデータベースの1つまたは複数の同期コピーを管理するため、プライマリ・データベースの予期しない停止が発生した場合でも、データ損失ゼロを実現できます。

  • インメモリー・データベース・レプリケーション
    ディスク破損などの根本的な破損から確実に分離でき、レプリケートされたデータブロックの包括的な自動検証機能を利用できます。

  • 読み取り専用以上のワークロードをスタンバイ・データベースにオフロード
    Oracle DMLリダイレクトにより、アプリケーションはスタンバイ・データベースからデータを操作できるため、プライマリ・データベースの重要なリソースを解放できます。スタンバイ・データベースの使用量が増え、最終的には投資利益率も向上します。

  • ファスト・スタート・フェイルオーバー(FSFO)
    Oracle Data Guard Brokerは、人の介入を必要とせずにスタンバイ・データベースに自動的にフェイルオーバーできます。

  • 自動ブロック修復
    スタンバイ・データベースの破損したデータベースをユーザーに意識させることなく自動的にリカバリします。

  • 遠隔同期
    ネットワーク・レイテンシを発生させずに、サイトの障害時にあらゆる距離でデータ損失ゼロを実現します。

  • アプリケーション・コンティニュイティ
    リカバリ可能な停止の後に処理中のデータベース・トランザクションをリカバリすることで、エンドユーザーやアプリケーションへの停止の影響を排除します。

  • データベースのローリング・アップグレード
    システムに別のソフトウェアを追加する手間をかける必要なく、データベースのバージョン・アップグレードによる停止時間を短縮します。

ということで今回は、Oracle Database@Azure 上の Oracle Exadata Database Service on Dedicated Infrastructure (ExaDB-D) を Zone2 / Zone3 に配置し、Active Data Guard 構成を実施しました。
さらに、Data Guard 用の接続 Service、Transparent Application Continuity (TAC)、Active Data Guard の DML リダイレクト、Autonomous Recovery Service まで含めて、単なる構成確認で終わらない「実運用を見据えた高可用性構成」を確認してみてみます。

■ 概要

 :white_check_mark: 今回の構成
 :white_check_mark: 事前準備
 :white_check_mark: Active Data Guard 設定
 :white_check_mark: Switchover 実行
 :white_check_mark: Failover 実行
 :white_check_mark: Reinstate 実行
 :white_check_mark: Standby 側の REDO 適用遅延(LAG)確認
 :white_check_mark: Data Guard用 接続 Service 確認と作成
 :white_check_mark: Transparent Application Continuity (TAC) 設定
 :white_check_mark: Standby Database の DML 操作有効化
 :white_check_mark: Oracle Database Autonomous Recovery Service の設定
 :white_check_mark: 技術解説

Switchover / Failover / Reinstate の違い

  • Switchover: 計画停止やメンテナンス時に、データ損失なく Primary / Standby を切り替える
  • Failover: Primary 障害時に Standby を昇格する
  • Reinstate: Failover 後に旧 Primary を Standby として復帰させる

■ 今回の構成

今回は、アベイラビリティ・ゾーンをまたいだネットワーク構成で Data Guard を構成します。
Oracle MAAは、災害復旧設定における可用性ゾーン間のネットワーク接続に関するベストプラクティスを推奨しています。以下の点を確認してください。

  • Oracle Exadataインフラストラクチャ(ExaDB-D)は、2つのアベイラビリティゾーン(AZ)にプロビジョニングされます。各Exadataインフラストラクチャは、プライマリ環境とスタンバイ環境を構成するために、少なくとも1つのExadata VMクラスタを別々の仮想ネットワーク(VNet)にデプロイします。
  • プライマリクライアントとスタンバイクライアント、およびバックアップサブネットは、IP CIDR範囲が重複しない別々の仮想ネットワーク(VNet)であることを確認してください。
  • Azure Kubernetes Servicesは少なくとも2つのAZにまたがり、VNetはプライマリおよびスタンバイVMクラスタの各VNetとピアリングされています。
  • データベースのバックアップおよび復元操作は、高帯域幅ネットワークを介してOCIオブジェクトストレージに対して実行されます。

構成図01.png

● 今回の前提条件

  • Oracle Database@Azure 上の ExaDB-D を 2 系統作成済み
  • Azure Japan East の Zone2 / Zone3 に配置済み
  • Primary 側 Database は作成済み
  • Standby 側は同一 Version の Database Home を作成済み、またはこれから作成する
  • Primary / Standby 間でネットワーク疎通がある
  • Active Data Guard を利用するため、対応ライセンス前提

● 事前確認チェックリスト

  • Primary / Standby 間で ping 疎通できる
  • Primary / Standby 間で TCP 1521 が疎通している
  • Standby 側に Primary と同じ Version の Database Home がある
  • DB_UNIQUE_NAME を決めている
  • 管理者パスワードを確認済み
  • TDE Wallet パスワードを確認済み
  • 事前チェックの実行を有効にしている

■ 事前準備

次を参考に Azure Japan East(Tokyoリージョン) の Zone2 と Zone3 へ ExDB-D を構築し、Primary 側に Database を作成してきます。

Oracle Exadata Database@Azure を作成してみてみた

今回は、次のように Database を作成しました。これを使用して Zone3 へ Standby Database を作成します。

Zone2 DB情報
<PRIMARY_DB_UNIQUE_NAME>   : CDB_TokyoZ2
<INSTANCE_NAME_NODE1>      : CDB1
<INSTANCE_NAME_NODE2>      : CDB2
<PDB_NAME>                 : pdb

■ OCI コンソールへ切り替え

OCIコンソールで データベースの作成管理同様、Data Guard 構成は、OCIコンソールを使用して設定管理します。

1) Azure コンソール VM Cluster 画面
OCIコンソールに移動するには、VM Cluster画面にある [Go to OCI]をクリックします。

02_VMCluster作成16.png

2) OCI コンソール画面
ログインすると、Oracle Cloud コンソールでの VM Cluster画面になります。
20_Database_Home作成01.png

■ Active Data Guard 設定

● Standby 側 DB_HOME 作成

・ DB バージョンと必要パッチが整合している必要があります。
今回は、既存のプライマリ DB と同じ Version の Database Home を作成します。

1) Primary の Database homes 画面
[データベース・ホームの作成] をクリック
40_Standbyへdbhome作成01.png

2) Create database home 画面
既存のプライマリ DB と同じ Version の Database Home を作成します。
データベース・ホームの作成ダイアログで、次のように入力し、[作成]をクリック

・ データベース・ホームの表示名: データベース・ホームの表示名
・ データベース・イメージ: データベースに使用されるOracle Databaseバージョンを決定します。 
・ データベース・イメージの変更をクリックして、目的のOracle公開イメージまたは事前に作成したカスタムデータベース・ソフトウェア・イメージを使用し、イメージ・タイプを選択します: 

40_Standbyへdbhome作成02.png
40_Standbyへdbhome作成03.png

3) Create database home 完了
40_Standbyへdbhome作成04.png

● ネットワーク疎通確認

Primary / Standby の両方向で、ネットワーク疎通を確認します。

・ ping疎通確認

[oracle@exa-z31-hkmas ~]$ ping 10.20.1.230 -c 3
  PING 10.20.1.230 (10.20.1.230) 56(84) bytes of data.
  64 bytes from 10.20.1.230: icmp_seq=1 ttl=64 time=1.26 ms
  64 bytes from 10.20.1.230: icmp_seq=2 ttl=64 time=1.20 ms
  64 bytes from 10.20.1.230: icmp_seq=3 ttl=64 time=1.22 ms

  --- 10.20.1.230 ping statistics ---
  3 packets transmitted, 3 received, 0% packet loss, time 2002ms
  rtt min/avg/max/mdev = 1.202/1.227/1.258/0.046 ms

・ 1521 Port 疎通確認

両Server 間で TCP 1521 が通ることを確認
Standby を作成するサーバーから、oracleユーザーで Primary Database へ SQL 接続できることを確認

[oracle@exa-z31-hkmas ~]$ sql system/<SYSTEM_PASSWORD>//10.20.1.85:1521/CDB_TokyoZ2.ociclientsubne.ocivnettokyoz2.oraclevcn.com

SQLcl: Release 25.4 Production on Sat Mar 28 12:20:10 2026

Copyright (c) 1982, 2026, Oracle.  All rights reserved.

Last Successful login time: Sat Mar 28 2026 12:20:11 +09:00

Connected to:
Oracle AI Database 26ai EE Extreme Perf Release 23.26.1.0.0 - Production
Version 23.26.1.0.0


SQL> select NAME, DB_UNIQUE_NAME from v$database;

  NAME    DB_UNIQUE_NAME
  _______ _________________
  CDB     CDB_TokyoZ2

・ qperf レイテンシ測定

[oracle@exa-z31-hkmas ~]$ qperf -vvu 10.20.1.230 -t 10 tcp_lat udp_lat
tcp_lat:
    latency   =  507 us
    msg_size  =    1 bytes
    time      =   10 sec
    timeout   =    5 sec
udp_lat:
    latency   =  497 us
    msg_size  =    1 bytes
    time      =   10 sec
    timeout   =    5 sec

● Data Guard 設定

VMクラスタの詳細ページの「データベース」セクションで、プライマリにするデータベースの名前をクリックします。
「データベースの詳細」ページの「リソース」で、「Data Guard Group」をクリックします。
1) Data Guard グループ画面
[Add Standby]をクリック
51_DGアソシエーション01.png

2) Enable Data Guard 画面
以下項目を設定し、[Enable Data Guard]をクリック

 ・ ピア・リージョン: スタンバイ・データベースを検索するリージョンを選択します。 プライマリ・データベースが存在するリージョンがデフォルトで選択されます。 スタンバイ・データベースは、別のリージョンに配置することもできます。 このフィールドに関連付けられたヒントのテキストで、プライマリ・データベースが配置されているリージョンがわかります。
 ・ 可用性ドメイン: スタンバイ・データベースの可用性ドメインを選択します。 このフィールドに関連付けられたヒントのテキストで、プライマリ・データベースが配置されている可用性ドメインがわかります。
 ・ サービスの選択: Exadata Database Service on Dedicated InfrastructureまたはExadata Database Service on Exascale Infrastructure。
 ・ Exadataインフラストラクチャの選択: 「サービスの選択」ドロップダウン・リストから「Exadata Database Service on Dedicated Infrastructure」を選択した場合にのみ適用されます。
 ・ Data Guardピア・リソース・タイプ: VMクラスタを選択します。
 ・ VMクラスタ: ドロップダウン・リストからクラウドVMクラスタを選択します。
 ・ Data Guardエクスペリエンスの選択:
    -[新しいData Guardグループ・リソースの使用]このオプションでは、新しいData Guard構成がData Guardグループ・リソースとして作成されます。 このオプションは、新しいAPIとともに、複数のスタンバイ・データベースの追加をサポートし、その他の機能拡張を提供します。 現在、既存のData Guard関連付けAPIを使用してData Guard操作を管理する自動化がある場合は、新しいAPIを使用してこれらの新機能を利用するようにアプリケーションを更新できます。
    -[既存のData Guard関連付けリソースの使用] Data Guard操作の管理の自動化が既存のData Guard関連付けAPIに依存する場合は、このオプションを選択します。 ただし、複数のスタンバイ・データベースを追加することはできず、新しいAPIによって提供される機能強化も得られません。
 ・ Data Guardタイプ: 「Active Data Guard」または「Data Guard」を選択します。 Active Data Guardは、次のような追加機能を提供: リアルタイム問合せおよびDMLオフロード、自動ブロック修復、スタンバイ・ブロック変更トラッキング、遠隔同期、グローバル・データ・サービスおよびアプリケーション・コンティニュイティ。 Active Data GuardにはOracle Active Data Guardライセンスが必要です。 Active Data Guardの詳細は、Active Data Guardを参照してください。 両方のData Guardタイプの完全な概要は、「Oracle Data Guardの紹介」を参照してください
 ・ 保護モード: 保護モードは、最大パフォーマンスまたは最大可用性です。 これらのオプションの詳細は、「Oracle Data Guardの保護モード」を参照してください。
 ・ トランスポートタイプ: このData Guardグループに使用されるREDO転送タイプ。 これらのオプションの詳細は、「REDO転送サービス」を参照してください。
 ・ 保護モードおよび輸送タイプ: スタンバイ・データベース作成のルール
 ・ データベース・ホームの選択: 新しいデータベース・ホームにスタンバイ・データベースを追加するには、スタンバイ・データベースを追加する前にデータベース・ホームを作成する必要があります
 ・ データベースの一意の名前: オプションで、DB_UNIQUE_NAMEデータベース・パラメータの値を指定します。 この値は、プライマリおよびスタンバイのクラウドVMクラスタ全体で一意である必要があります。 一意の名前は次の要件を満たす必要があります:
      最大30文字であること
      英数字またはアンダースコア(_)文字のみを含みます
      先頭はアルファベット
      VMクラスタ全体で一意。 テナンシ全体で一意になるようにすることをお薦めします。
 ・ データベース・パスワード: プライマリ・データベースのデータベース管理者パスワードを入力します。 これと同じデータベース管理者パスワードをスタンバイ・データベースで使用します。
 ・ TDEウォレット・パスワード: TDEウォレット・パスワードを入力します。 
 ・ Oracle SIDプレフィクス: Oracle Databaseインスタンス番号は、INSTANCE_NAMEデータベース・パラメータを作成するために、SIDプレフィクスに自動的に追加されます。 INSTANCE_NAMEパラメータはSIDとも呼ばれます。 指定しない場合、SID接頭辞はデフォルトでdb_unique_nameの最初の12文字に設定されます。
   SIDプレフィクスは要件を満たしている必要があります:
    最大12文字
    英数字のみを含みます
    先頭はアルファベット
    VMクラスタ内、およびプライマリ・データベースとスタンバイ・データベース間で一意

今回の構成では、主に次の項目を設定しました。

- ピア・リージョン: Japan East
- 可用性ドメイン / ゾーン: Zone3 側を選択
- Data Guard タイプ: Active Data Guard
- Data Guard ピア・リソース・タイプ: VMクラスタ
- Standby 側 DB Home: Primary と同一 Version のものを選択
- 事前チェックの実行: 有効

スタンバイ・データベースを追加する前に、事前チェックを実行します。「事前チェックの実行」オプションを選択してください。

51_DGアソシエーション02.png

3) Data Guard 設定中
51_DGアソシエーション03.png

51_DGアソシエーション05.png

4) Data Guard 設定完了
State が Available になれば、Data Guard 構成は完了です。
51_DGアソシエーション08.png

51_DGアソシエーション09.png

51_DGアソシエーション10.png

● Data Guard 設定確認

ここからは、詳しくログ出力させながらコマンドで確認していきます。

・ DGMGRL 接続

1) 環境変数設定
いずれかの Database Node へ OS ログイン

[oracle@exa-z21-hkmas ~]$ . CDB.env
[oracle@exa-z21-hkmas ~]$ env | grep ORA
  ORACLE_UNQNAME=CDB_TokyoZ2
  ORACLE_SID=CDB1
  ORACLE_BASE=/u02/app/oracle
  ORACLE_HOME=/u02/app/oracle/product/23.0.0.0/dbhome_1
  ORACLE_HOSTNAME=exa-z21-hkmas.ociclientsubne.ocivnettokyoz2.oraclevcn.com

2) DGMGRL 接続
Oracle Data Guard コマンドライン・インタフェース(DGMGRL)を使用して Data Guard 状態を確認します。

[oracle@exa-z21-hkmas ~]$ dgmgrl /
  DGMGRL for Linux: Release 23.26.1.0.0 - Production on Fri Mar 27 09:17:12 2026
  Version 23.26.1.0.0
  
  Copyright (c) 1982, 2026, Oracle and/or its affiliates.  All rights reserved.
  
  Welcome to DGMGRL, type "help" for information.
  Connected to "CDB_TokyoZ2"
  Connected as SYSDG.
DGMGRL>

・ 現在の保護モード確認

DGMGRL> show configuration verbose

Configuration - cdb_dgconf

  Protection Mode: MaxPerformance
  Members:
  CDB_TokyoZ2 - Primary database
    CDB_TokyoZ3 - Physical standby database

  Properties:
    BystandersFollowRoleChange      = 'ALL'
    CommunicationTimeout            = '180'
    ConfigurationSimpleName         = 'cdb_dgconf'
    ConfigurationWideServiceName    = 'CDB_CFG'
    DrainTimeout                    = '0'
    ExternalDestination1            = ''
    ExternalDestination2            = ''
    FastStartFailoverAutoReinstate  = 'TRUE'
    FastStartFailoverLagGraceTime   = '0'
    FastStartFailoverLagLimit       = '30'
    FastStartFailoverLagType        = 'APPLY'
    FastStartFailoverPmyShutdown    = 'TRUE'
    FastStartFailoverThreshold      = '30'
    ObserverOverride                = 'FALSE'
    ObserverPingInterval            = '0'
    ObserverPingRetry               = '0'
    ObserverReconnect               = '0'
    OperationTimeout                = '30'
    PrimaryDatabaseCandidates       = ''
    PrimaryLostWriteAction          = 'CONTINUE'
    TraceLevel                      = 'USER'

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 49 seconds ago)

・ Data Guard の設定確認: Zone2 の DB (CDB_TokyoZ2)

PRIMARY であることを確認

DGMGRL> show database verbose CDB_TokyoZ2

Database - CDB_TokyoZ2

  Role:                PRIMARY
  Intended State:      TRANSPORT-ON
  Redo Rate:           208 Byte/s  in 15 seconds (computed 14 seconds ago)
  Instance(s):
    CDB1
    CDB2

  Properties:
    AlternateLocation               = ''
    ApplyInstanceTimeout            = '0'
    ApplyInstances                  = '0'
    ApplyLagThreshold               = '30'
    ApplyParallel                   = 'AUTO'
    ArchiveLocation                 = ''
    Binding                         = 'OPTIONAL'
    DGConnectIdentifier             = 'CDB_TokyoZ2'
    DelayMins                       = '0'
    FastStartFailoverTarget         = 'CDB_TokyoZ3'
    InconsistentLogXptProps         = '(monitor)'
    LogShipping                     = 'ON'
    LogXptMode                      = 'ASYNC'
    LogXptStatus                    = '(monitor)'
    MaxFailure                      = '0'
    NetTimeout                      = '30'
    ObserverConnectIdentifier       = ''
    PreferredApplyInstance          = ''
    PreferredObserverHosts          = ''
    RecvQEntries                    = '(monitor)'
    RedoCompression                 = 'DISABLE'
    RedoRoutes                      = ''
    ReopenSecs                      = '300'
    SendQEntries                    = '(monitor)'
    SidName(*)
    StandbyAlternateLocation        = ''
    StandbyArchiveLocation          = ''
    StaticConnectIdentifier(*)
    TopWaitEvents(*)
    TransportDisconnectedThreshold  = '30'
    TransportLagThreshold           = '30'
    UserManagedParams               = ''
    (*) - Please check specific instance for the property value

  Log file locations(*):
    (*) - Check specific instance for log file locations.

Database Status:
SUCCESS


DGMGRL> validate database verbose CDB_TokyoZ2
DGM-17567: Current database session was authenticated using operating system credentials.

  Database Role:    Primary database

  Ready for Switchover:  Yes

  Flashback Database Status:
    Database     Status           Retention Target
    CDB_TokyoZ2  On               1440
    CDB_TokyoZ3  On               1440

  Force Logging Status:
    Database     Status           Nonlogged Blocks
    CDB_TokyoZ2  On               0

  Capacity Information:
    Database     Instances        Threads
    CDB_TokyoZ2  2                2

  Managed by Clusterware:
    CDB_TokyoZ2:  YES

  Temporary Tablespace File Information:
    CDB_TokyoZ2 Temp Files:  3

  Data file Online Move in Progress:
    CDB_TokyoZ2:  No

  Transport-Related Information:
    Transport On:  Yes

  Log Files Cleared:
    CDB_TokyoZ2 Standby Redo Log Files:  Cleared

・ Data Guard の設定確認: Zone3 の DB (CDB_TokyoZ3)

PHYSICAL STANDBY であることを確認

DGMGRL> show database verbose CDB_TokyoZ3

Database - CDB_TokyoZ3

  Role:                PHYSICAL STANDBY
  Intended State:      APPLY-ON
  Transport Lag:       0 seconds (computed 1 second ago)
  Apply Lag:           0 seconds (computed 1 second ago)
  Average Apply Rate:  15.00 KByte/s
  Active Apply Rate:   1.36 MByte/s
  Maximum Apply Rate:  1.91 MByte/s
  Real Time Query:     ON
  Instance(s):
    CDB1 (apply instance)
    CDB2

  Properties:
    AlternateLocation               = ''
    ApplyInstanceTimeout            = '0'
    ApplyInstances                  = '0'
    ApplyLagThreshold               = '30'
    ApplyParallel                   = 'AUTO'
    ArchiveLocation                 = ''
    Binding                         = 'OPTIONAL'
    DGConnectIdentifier             = 'CDB_TokyoZ3'
    DelayMins                       = '0'
    FastStartFailoverTarget         = 'CDB_TokyoZ2'
    InconsistentLogXptProps         = '(monitor)'
    LogShipping                     = 'ON'
    LogXptMode                      = 'ASYNC'
    LogXptStatus                    = '(monitor)'
    MaxFailure                      = '0'
    NetTimeout                      = '30'
    ObserverConnectIdentifier       = ''
    PreferredApplyInstance          = ''
    PreferredObserverHosts          = ''
    RecvQEntries                    = '(monitor)'
    RedoCompression                 = 'DISABLE'
    RedoRoutes                      = ''
    ReopenSecs                      = '300'
    SendQEntries                    = '(monitor)'
    SidName(*)
    StandbyAlternateLocation        = ''
    StandbyArchiveLocation          = ''
    StaticConnectIdentifier(*)
    TopWaitEvents(*)
    TransportDisconnectedThreshold  = '30'
    TransportLagThreshold           = '30'
    UserManagedParams               = ''
    (*) - Please check specific instance for the property value

  Log file locations(*):
    (*) - Check specific instance for log file locations.

Database Status:
SUCCESS

■ Switchover 実行(Primary:Zone2 -> Zone3)

メンテナンス用途などで、計画的にプライマリ・データベースとスタンバイ・データベースを切り替えます。
スイッチオーバー中にデータが失われることはありません。

● Data Guard Group 側作業

1) Data Guard Associations画面
対象 DB の右にあるドットをクリックし、[Switchover]をクリック
01_Z2-Z3-Switchover02.png

2) Switchover Database画面
admin パスワードを入力し、[OK]をクリック
01_Z2-Z3-Switchover03.png

3) Switchover中
01_Z2-Z3-Switchover04.png

01_Z2-Z3-Switchover06.png

4) Switchover完了
01_Z2-Z3-Switchover07.png

01_Z2-Z3-Switchover08.png

● Switchover 確認

・ Zone2 の DB (CDB_TokyoZ2)確認

PHYSICAL STANDBYへ切り替わっていることを確認

DGMGRL> show database CDB_TokyoZ2

Database - CDB_TokyoZ2

  Role:                PHYSICAL STANDBY
  Intended State:      APPLY-ON
  Transport Lag:       0 seconds (computed 1 second ago)
  Apply Lag:           0 seconds (computed 1 second ago)
  Average Apply Rate:  14.00 KByte/s
  Real Time Query:     ON
  Instance(s):
    CDB1
    CDB2 (apply instance)

Database Status:
SUCCESS

・ Zone3 の DB (CDB_TokyoZ3)確認

PRIMARYへ切り替わっていることを確認

DGMGRL> show database CDB_TokyoZ3

Database - CDB_TokyoZ3

  Role:                PRIMARY
  Intended State:      TRANSPORT-ON
  Redo Rate:           201 Byte/s  in 15 seconds (computed 16 seconds ago)
  Instance(s):
    CDB1
    CDB2

Database Status:
SUCCESS

■ Failover 実行(Primary: Zone3 -> Zone2)

プライマリ・データベースの障害時に、スタンバイ・データベースをプライマリ・ロールに変更します。
フラッシュバック・データベースが使用可能になっている場合は、障害の原因が修正された後、Reinstateコマンドにより元どおり新しいプライマリ・データベースのスタンバイに戻すことができます。

● Standby DB (Zone3) 側作業

1) Data Guard Associations画面
対象 DB の右にあるドットをクリックし、[Failover 実行]をクリック
02_Z3-Z2-Failover02.png

2) Failover Database画面
admin パスワードを入力し、[OK]をクリック
02_Z3-Z2-Failover03.png

3) Failover中
02_Z3-Z2-Failover04.png
02_Z3-Z2-Failover05.png

4) Failover完了
02_Z3-Z2-Failover06.png

02_Z3-Z2-Failover07.png

● Failover 確認

・ Zone2 の DB (CDB_TokyoZ2)確認

PRIMARYへ切り替わっていることを確認

DGMGRL>  show database CDB_TokyoZ2

Database - CDB_TokyoZ2

  Role:                PRIMARY
  Intended State:      TRANSPORT-ON
  Redo Rate:           (unknown)

  Instance(s):
    CDB1
    CDB2

Database Status:
SUCCESS

・ Zone3 の DB (CDB_TokyoZ3)確認

PHYSICAL STANDBYへ切り替わり、Statusは DISABLED - ORA-16661であることを確認

DGMGRL> show database CDB_TokyoZ3

Database - CDB_TokyoZ3

  Role:                PHYSICAL STANDBY
  Intended State:      APPLY-ON
  Transport Lag:       (unknown)
  Apply Lag:           (unknown)
  Average Apply Rate:  (unknown)
  Real Time Query:     OFF
  Instance(s):
    CDB1
    CDB2

Database Status:
DISABLED - ORA-16661: The standby database must be reinstated.

■ Reinstate 実行(障害が発生したプライマリ・データベース Zone3: CDB_TokyoZ3 の回復)

フェイルオーバーした障害プライマリ・データベースをスタンバイ・データベースとして復旧します

● Primary DB 側作業

1) Data Guard Associations 画面
対象 DB の右にあるドットをクリックし、[Reinstate実行]をクリック
03_Z3-REinstate01.png

2) Reinstate Database 画面
admin パスワードを入力し、[OK]をクリック
03_Z3-REinstate02.png

3) Reinstate 中
03_Z3-REinstate03.png

4) Reinstate 完了
03_Z3-REinstate05.png

03_Z3-REinstate06.png

● Reinstate 確認

・ Zone2 の DB (CDB_TokyoZ2)確認

Statusは変わらず、PRIMARYロールであることを確認

DGMGRL> show database CDB_TokyoZ2

Database - CDB_TokyoZ2

  Role:                PRIMARY
  Intended State:      TRANSPORT-ON
  Redo Rate:           450 Byte/s  in 38 seconds (computed 0 seconds ago)
  Instance(s):
    CDB1
    CDB2

Database Status:
SUCCESS

・ Zone3 の DB (CDB_TokyoZ3)確認

Statusは DISABLED - ORA-16661から、SUCCESSへ変わっていることを確認

DGMGRL> show database CDB_TokyoZ3

Database - CDB_TokyoZ3

  Role:                PHYSICAL STANDBY
  Intended State:      APPLY-ON
  Transport Lag:       0 seconds (computed 1 second ago)
  Apply Lag:           0 seconds (computed 1 second ago)
  Average Apply Rate:  60.00 KByte/s
  Real Time Query:     ON
  Instance(s):
    CDB1
    CDB2 (apply instance)

Database Status:
SUCCESS

■ Standby 側の REDO 適用遅延(LAG)確認

V$DATAGUARD_STATSは、スタンバイ・データベース上での問合せに対して、Oracle Data Guardメトリックに関する情報を示します。

[oracle@exa-z3-tokyo1-hkmas ~]$ sql / as sysdba

SQLcl: Release 25.4 Production on Fri Mar 27 19:34:59 2026

Copyright (c) 1982, 2026, Oracle.  All rights reserved.

Connected to:
Oracle AI Database 26ai EE Extreme Perf Release 23.26.1.0.0 - Production
Version 23.26.1.0.0

SQL> select name,value,time_computed,unit from gv$dataguard_stats;

NAME                      VALUE               TIME_COMPUTED          UNIT
_________________________ ___________________ ______________________ _______________________________
transport lag             +00 00:00:00        03/27/2026 19:35:07    day(2) to second(0) interval
apply lag                 +00 00:00:01        03/27/2026 19:35:07    day(2) to second(0) interval
apply finish time         +00 00:00:00.002    03/27/2026 19:35:07    day(2) to second(3) interval
estimated startup time    16                  03/27/2026 19:35:07    second
transport lag             +00 00:00:00        03/27/2026 19:35:07    day(2) to second(0) interval
apply lag                                     03/27/2026 19:35:07    day(2) to second(0) interval
apply finish time                             03/27/2026 19:35:07    day(2) to second(3) interval
estimated startup time    12                  03/27/2026 19:35:07    second

8 rows selected.

■ Data Guard用 接続 Service 確認と作成

Oracle Data Guard Broker によって管理されるロール移行により、人が介入することなく、スタンバイ・データベースのプライマリ・ロールへの自動移行、プライマリ・ロールに適したデータベース・サービスの開始、障害が発生したプライマリ・データベースとの接続の解除(TCP タイムアウトからの切り離し)のクライアントへの通知、および新しいプライマリ・データベースへのクライアントの接続を実行できます。

ここでは、自動で作成されたService と 手動で作成する Service の方法を説明します。

● 自動で作成されたService確認

Data Guardアソシエーションで Active Data Guard構成すると プライマリ・ロール と スタンバイ・ロールのService が作成されます。

・ Service 一覧
自動作成された Service を確認

[oracle@exa-z21-hkmas ~]$ srvctl status service -db CDB_TokyoZ2
  Service CDB_PDB.paas.oracle.com is running on instances CDB1,CDB2
  Service CDB_PDB_ro.paas.oracle.com is not running.

・ PRIMARY Role の Service 確認
Service role = PRIMARY が設定された Service が プライマリ・ロールのサービスです。
これを使用して、Switchover, Failover されてもこのサービス名を使用すればプライマリ・データベースへ接続できます。

[oracle@exa-z21-hkmas ~]$ srvctl config service -db CDB_TokyoZ2 -service CDB_PDB.paas.oracle.com | grep role
  Service role: PRIMARY

[oracle@exa-z21-hkmas ~]$ srvctl config service -db CDB_TokyoZ2 -service CDB_PDB.paas.oracle.com
  Service name: CDB_PDB.paas.oracle.com
  Cardinality: 2
  Service role: PRIMARY
  Management policy: AUTOMATIC
  DTP transaction: FALSE
  AQ HA notifications: FALSE
  Global: FALSE
  Commit Outcome: FALSE
  Commit Outcome Fastpath: FALSE
  Reset State: NONE
  Failover type: NONE
  Failover method: NONE
  Failover retries:
  Failover delay:
  Failover restore: NONE
  Connection Load Balancing Goal: LONG
  Runtime Load Balancing Goal: NONE
  TAF policy specification: NONE
  Edition:
  Pluggable database name: PDB
  True Cache service:
  Maximum lag time: ANY
  SQL Translation Profile:
  Retention: 86400 seconds
  Failback :  no
  Replay Initiation Time: 300 seconds
  Drain timeout:
  Template timeout: 86400 seconds
  Stop option:
  Session State Consistency:
  Auto Connection Rebalance: DEFAULT
  GSM Flags: 0
  Service is enabled
  Preferred instances: CDB1,CDB2
  Available instances:
  CSS critical: no

・ PHYSICAL_STANDBY Role の Service 確認
Service role = PHYSICAL_STANDBY が設定された Service が Active Standby Role のサービスです。
これを使用して、Switchover, Failover されてもこのサービス名を使用すれば、読み込み可能なスタンバイ・データベースへ接続できます。ダウンしているデータベースへは接続しません。

[oracle@exa-z21-hkmas ~]$ srvctl config service -db CDB_TokyoZ2 -service CDB_PDB_ro.paas.oracle.com | grep role
  Service role: PHYSICAL_STANDBY

[oracle@exa-z21-hkmas ~]$ srvctl config service -db CDB_TokyoZ2 -service CDB_PDB_ro.paas.oracle.com
  Service name: CDB_PDB_ro.paas.oracle.com
  Cardinality: 2
  Service role: PHYSICAL_STANDBY
  Management policy: AUTOMATIC
  DTP transaction: FALSE
  AQ HA notifications: FALSE
  Global: FALSE
  Commit Outcome: FALSE
  Commit Outcome Fastpath: FALSE
  Reset State: NONE
  Failover type: NONE
  Failover method:
  Failover retries:
  Failover delay:
  Failover restore: NONE
  Connection Load Balancing Goal: LONG
  Runtime Load Balancing Goal: NONE
  TAF policy specification: NONE
  Edition:
  Pluggable database name: PDB
  True Cache service:
  Maximum lag time: ANY
  SQL Translation Profile:
  Retention: 86400 seconds
  Failback :  no
  Replay Initiation Time: 300 seconds
  Drain timeout:
  Template timeout: 86400 seconds
  Stop option:
  Session State Consistency:
  Auto Connection Rebalance: DEFAULT
  GSM Flags: 0
  Service is enabled
  Preferred instances: CDB1,CDB2
  Available instances:
  CSS critical: no

● 新規で Service 作成する場合

今回、例として次の Service を作成します。

  • app_rw: Primary ロールのデータベースへ接続するためのサービス
  • app_ro: PHYSICAL_STANDBY ロールのデータベースへ接続するためのサービス

1) Primary 側 DB に app_rw を作成
Primary 側 DB に Read/Write可能な Primary Databaseへ接続する app_rw サービスを作成
ここでは、クライアントが接続する preferredで優先するインスタンスを設定しています。

srvctl add service \
  -db <PRIMARY_DB_UNIQUE_NAME> \
  -service app_rw \
  -pdb <PDB_NAME> \
  -preferred "<PRIMARY_PREF_INST>" \
  -available "<PRIMARY_AVAIL_INST>" \
  -notification TRUE \
  -clbgoal LONG \
  -rlbgoal NONE \
  -drain_timeout 300 \
  -stopoption IMMEDIATE \
  -role PRIMARY

2) Primary 側 DB に app_ro を作成
Primary 側 DB に、Read 可能な Active Standby Database へ接続する app_ro サービスを作成します。
ここでは、クライアントが接続する preferred で優先するインスタンスを設定しています。

srvctl add service \
  -db <PRIMARY_DB_UNIQUE_NAME> \
  -service app_ro \
  -pdb <PDB_NAME> \
  -preferred "<PRIMARY_PREF_INST>" \
  -available "<PRIMARY_AVAIL_INST>" \
  -notification TRUE \
  -clbgoal LONG \
  -rlbgoal NONE \
  -drain_timeout 300 \
  -stopoption IMMEDIATE \
  -role PHYSICAL_STANDBY

3) Standby 側 DB に app_rw を作成
ここでは、クライアントが接続する preferredで優先するインスタンスを設定しています。

srvctl add service \
  -db <STANDBY_DB_UNIQUE_NAME> \
  -service app_rw \
  -pdb <PDB_NAME> \
  -preferred "<STANDBY_PREF_INST>" \
  -available "<STANDBY_AVAIL_INST>" \
  -notification TRUE \
  -clbgoal LONG \
  -rlbgoal NONE \
  -drain_timeout 300 \
  -stopoption IMMEDIATE \
  -role PRIMARY

4) Standby 側 DB に app_ro を作成
ここでは、クライアントが接続する preferredで優先するインスタンスを設定しています。

srvctl add service \
  -db <STANDBY_DB_UNIQUE_NAME> \
  -service app_ro \
  -pdb <PDB_NAME> \
  -preferred "<STANDBY_PREF_INST>" \
  -available "<STANDBY_AVAIL_INST>" \
  -notification TRUE \
  -clbgoal LONG \
  -rlbgoal NONE \
  -drain_timeout 300 \
  -stopoption IMMEDIATE \
  -role PHYSICAL_STANDBY

-role PRIMARY のサービスは Primary のときだけ、-role PHYSICAL_STANDBY のサービスは Physical Standby のときだけ起動します。-preferred / -available と -pdb を含む構文は現行 SRVCTL リファレンスに載っています。

5)もし 2 ノード両方で均等に受けたいなら
両ノード運用にしたいなら、-preferred を 2 インスタンスとも指定できます。
-preferred はカンマ区切りのリストです。

srvctl add service \
  -db <PRIMARY_DB_UNIQUE_NAME> \
  -service app_rw \
  -pdb <PDB_NAME> \
  -preferred "<PRIMARY_INST1>,<PRIMARY_INST2>" \
  -notification TRUE \
  -clbgoal LONG \
  -rlbgoal NONE \
  -drain_timeout 300 \
  -stopoption IMMEDIATE \
  -role PRIMARY

■ Transparent Application Continuity (TAC) 設定

Oracle Application Continuityを活用することで、計画メンテナンス時や予期しない障害時にも継続的な可用性を維持できるようアプリケーションの耐障害性を向上させます。

Data Guard 構成を組んだ場合、role-based service と組み合わせて Application Continuity / Transparent Application Continuity を設定できます。
今回は、Primary ロール用に作成した app_rw サービスへ Transparent Application Continuity (TAC) を設定します。

Transparent Application Continuity を有効化すると、計画停止や一時的な障害発生時に、アプリケーションから見るとエラーではなく「少し遅延しただけ」に近い形で処理を継続しやすくなります。

● 今回の設定

  • app_rw : Primary ロールのデータベースへ接続するサービス
  • app_ro : PHYSICAL_STANDBY ロールのデータベースへ接続するサービス, ADG_REDIRECT_DML利用可能
  • TAC は app_rw に設定

● app_rw へ TAC を設定

PDB に接続し、DBMS_APP_CONT_ADMIN パッケージを使用してサービスへ設定します。
このパッケージは、アプリケーション継続性に関連する、DBAレベルの管理操作をまとめたものです。

ENABLE_TAC
この手順により、特定のサービスにおいて透過的なアプリケーション継続性(TAC)が有効になります。

DBMS_APP_CONT_ADMIN.ENABLE_TAC (
   service_name              IN VARCHAR2,
   failover_restore          IN VARCHAR2       DEFAULT 'AUTO'
   replay_initiation_timeout IN BINARY_INTEGER DEFAULT 300
   session_state_consistency IN VARCHAR2       DEFAULT 'AUTO');

ENABLE_RESET_STATE
この手順により、リクエスト間でセッション状態の使用状況をクリアできるため、新しいリクエストは毎回クリーンな状態で開始されます

DBMS_APP_CONT_ADMIN.ENABLE_RESET_STATE (
   service_name IN VARCHAR2,
   level        IN VARCHAR2 DEFAULT AUTO); -- LEVEL: Oracle AI Database のリセットセッション状態構成のレベル。使用可能なオプションはNONEと ですLEVEL1。

SET_DRAINING
この手順では、タイムアウト値や停止オプションなど、サービスのドレインオプションを設定します。

DBMS_APP_CONT_ADMIN.SET_DRAINING (
   service_name  IN VARCHAR2,
   drain_timeout IN BINARY_INTEGER DEFAULT 300 -- リソースのドレイン処理が完了するまでの許容時間を秒単位で指定
   stop_option   IN VARCHAR2       DEFAULT 'NONE');

今回の環境では、Physical Standby は READ ONLY でオープンしているため、DBMS_APP_CONT_ADMIN によるサービス属性変更を実行できません。
そのため、app_rw への TAC 設定は Primary ロール時に実施します。

実際に Standby 側で実行すると、次のように ORA-44317: database open read-only が発生します。

SQL> EXEC DBMS_APP_CONT_ADMIN.ENABLE_TAC('app_rw');
  BEGIN DBMS_APP_CONT_ADMIN.ENABLE_TAC('app_rw'); END;
  *
  ERROR at line 1:
  ORA-44317: database open read-only
  ORA-06512: at "SYS.DBMS_SERVICE_ERR", line 54
  ORA-06512: at "SYS.DBMS_SERVICE", line 455
  ORA-06512: at "SYS.DBMS_APP_CONT_ADMIN", line 296
  ORA-06512: at "SYS.DBMS_APP_CONT_ADMIN", line 400
  ORA-06512: at line 1

1) サービス起動確認

app_rwサービスが起動していることを確認。
起動していない場合は起動しておきます。

srvctl start service -db <DB_UNIQUE_NAME> -service app_rw
srvctl status service -db <DB_UNIQUE_NAME> -service app_rw
Zone2起動確認
[oracle@exa-z22-hsjyp ~]$ srvctl status service -db CDB_TokyoZ2 -service app_rw
  Service app_rw is running on instances CDB1
Zone3起動確認
[oracle@exa-z22-hkmas ~]$ srvctl status service -db CDB_TokyoZ3 -service app_rw
  Service app_rw is running on instances CDB1

※ Zone3 側の app_rw 起動確認は、Switchover により Zone3 が Primary ロールへ切り替わった後の状態です。

2) Zone2 側でTAC設定

sql / as sysdba

ALTER SESSION SET CONTAINER=pdb;

EXEC DBMS_APP_CONT_ADMIN.ENABLE_TAC('app_rw');
EXEC DBMS_APP_CONT_ADMIN.ENABLE_RESET_STATE('app_rw', 'LEVEL1');
EXEC DBMS_APP_CONT_ADMIN.SET_DRAINING('app_rw', 300, 'IMMEDIATE');

3) Zone3 側でも同様にTAC設定

Switchover により CDB_TokyoZ3 が Primary になった後、同様に実施します。

sql / as sysdba

ALTER SESSION SET CONTAINER=pdb;

EXEC DBMS_APP_CONT_ADMIN.ENABLE_TAC('app_rw');
EXEC DBMS_APP_CONT_ADMIN.ENABLE_RESET_STATE('app_rw', 'LEVEL1');
EXEC DBMS_APP_CONT_ADMIN.SET_DRAINING('app_rw', 300, 'IMMEDIATE');

● 設定確認

設定後は、まずサービス定義を確認します。

1) サービス設定確認

サービスにTACが設定されていることを確認します。

srvctl config service -db <DB_UNIQUE_NAME> -service app_rw
実行結果
[oracle@exa-z21-hsjyp ~]$ srvctl config service -db CDB_TokyoZ2 -service app_rw
	Service name: app_rw
	Cardinality: 1
	Service role: PRIMARY
	Management policy: AUTOMATIC
	DTP transaction: FALSE
	AQ HA notifications: TRUE
	Global: FALSE
	Commit Outcome: TRUE
	Commit Outcome Fastpath: TRUE
	Reset State: LEVEL1
	Failover type: AUTO
	Failover method: NONE
	Failover retries: 30
	Failover delay: 5
	Failover restore: AUTO
	Connection Load Balancing Goal: LONG
	Runtime Load Balancing Goal: NONE
	TAF policy specification: NONE
	Edition:
	Pluggable database name: pdb
	True Cache service:
	Maximum lag time: ANY
	SQL Translation Profile:
	Retention: 86400 seconds
	Failback :  no
	Replay Initiation Time: 600 seconds
	Drain timeout: 300 seconds
	Template timeout: 86400 seconds
	Stop option: immediate
	Session State Consistency: AUTO
	Auto Connection Rebalance: DEFAULT
	GSM Flags: 0
	Service is enabled
	Preferred instances: CDB1
	Available instances: CDB2
	CSS critical: no

● クライアント側設定

Transparent Application Continuity を有効化しても、クライアント側が対応していないと効果を十分に得られません。
26ai では、AC/TAC が有効化されたサービスへ接続することが前提となります。
代表的には、次のような Oracle クライアント / 接続プールが対象です。

・ Oracle JDBC Replay Driver
・ Oracle UCP
・ ODP.NET
・ OCI Session Pool
・ WebLogic Active GridLink

また、planned / unplanned outage を素早く検知するため、FAN を利用できる構成が推奨されます。

接続文字列には、少なくとも次のようなタイムアウト / 再試行設定を入れておくと実運用しやすくなります。
・参考: 動的データベースサービスによるワークロード管理

TNS接続記述子設定例
APP_RW =
 (DESCRIPTION=
   (CONNECT_TIMEOUT=90)
   (RETRY_COUNT=30)
   (RETRY_DELAY=3)
   (TRANSPORT_CONNECT_TIMEOUT=3)
   (ADDRESS_LIST=
     (LOAD_BALANCE=ON)
     (ADDRESS=(PROTOCOL=TCP)(HOST=<SCAN1>)(PORT=1521))
     (ADDRESS=(PROTOCOL=TCP)(HOST=<SCAN2>)(PORT=1521))
     (ADDRESS=(PROTOCOL=TCP)(HOST=<SCAN3>)(PORT=1521))
   )
   (CONNECT_DATA=
     (SERVICE_NAME=app_rw)
   )
 )

● 動作確認のポイント

Transparent Application Continuity 設定後は、app_rw を使用して接続しているアプリケーションから次を確認します。

  1. 計画停止前に service draining が有効に働くことを確認
  2. Switchover 実行時にセッション断ではなく、短時間の遅延後に処理継続できることを確認
  3. role-based service のため、切替後も app_rw で新しい Primary へ接続できることを確認

Active Data Guard の DML リダイレクトは便利な機能ですが、Application Continuity / Transparent Application Continuity と同時利用する前提ではありません。
更新系アプリケーションでは app_rw + TAC、参照系では app_ro、DML リダイレクトは用途を限定して使い分けるのが分かりやすい構成です。

■ Standby Database の DML 操作有効化

ACTIVE DATA GUARD DMLリダイレクトを有効化します。
これは Active Data Guard 限定の機能です。スタンバイ・データベースに対する DML 操作をプライマリ・データベースにリダイレクトできるようにし、ときおり書込みが発生するレポート・アプリケーションを Active Data Guard スタンバイ・データベースでアクティブに実行できるようにする機能です。
各 Database ごとに、セッション単位または永続設定で個別に有効化できます。

● セッション単位

現在のセッションの DML 操作の自動リダイレクトを構成するには、次のコマンドを使用します。

SQL> ALTER SESSION ENABLE ADG_REDIRECT_DML;

● 永続単位

Active Data Guard 環境で、すべてのスタンバイ・セッションの DML 操作の自動リダイレクトを構成するには、ADG_REDIRECT_DML 初期化パラメータを TRUE に設定します。

SQL> ALTER SYSTEM SET ADG_REDIRECT_DML=true SCOPE=BOTH;

■ Oracle Database Autonomous Recovery Service の設定

Oracle Database Autonomous Recovery Service は、Oracle Databaseをデータ損失やサイバー脅威から保護するために設計された、完全マネージド型のサービスです。データベースのオーバーヘッドを削減しながら高速なバックアップを実現し、検証済みのバックアップによる信頼性の高いリカバリ、そして障害やランサムウェア攻撃発生後1秒以内に復旧できるリアルタイム保護機能を提供します。このサービスは、集中管理型のデータ保護ダッシュボードを備えており、高い耐障害性を備えた Oracle Databaseのバックアップに推奨されます。
これは、Standby Database へも設定できます。
作成手順は次が参考になります。

■ まとめ

今回は、Oracle Database@Azure 上の ExaDB-D を使って、Active Data Guard の構成だけでなく、Switchover / Failover / Reinstate、Data Guard 用接続 Service、Transparent Application Continuity (TAC)、DML リダイレクトまで一通り確認できました。

単に Standby Database を作るだけでなく、切替時にどう接続し、どう継続し、どう復旧させるかまで見えてくると、Data Guard は一気に“使える高可用性構成”として面白くなります。

次は、Maximum Availability や Fast-Start Failover (FSFO)、さらにクライアント側の FAN / UCP / Replay Driver を含めた Application Continuity の動作確認まで進めてみようと思います。

■ 参考

■ 技術解説

止まらないHigh availabilityの仕組みをIT初心者でも理解できるよう解説しています

20
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
20
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?