はじめに

みなさん、こんにちは。
Oracle Cloud Infrastructure 検証チームです。

前回は[BaseDBのData Guardについて(構成編)]にて、
Oracle Base Database Service(BaseDB)のData Guardの構成方法をご紹介しました。
今回は、構成したData Guardを使用して、
スイッチオーバー操作とフェイルオーバー操作の検証してみましたので、検証した内容をご紹介したいと思います。

スイッチ・オーバーとフェイル・オーバー

Data Guardでは、スイッチオーバーまたはフェイルオーバーを実施することで、
プライマリDBとスタンバイDBの役割(ロール)を変更することができます。

スイッチオーバー

スイッチオーバーは、主に計画停止やメンテナンス時に実施します。
スイッチオーバーを実行すると、プライマリDBとスタンバイDBの役割(ロール)を切り替えることができます。
スイッチオーバー実施時は、スタンバイDBへ更新履歴の転送・適用をしきった状態で、役割(ロール)を切り替える為、データの損失は発生しません。

フェイルオーバー

フェイルオーバーは、主にプライマリDBの障害発生時に実施します。
フェイルオーバーを実行すると、スタンバイDBがプライマリ・ロールへ移行され、新しいプライマリDBとして動作します。
フェイルオーバー実施後は、スタンバイDBが存在しない状態になる為、
Data Guardによる同期を再開するには、障害が発生した古いプライマリDBを新しいスタンバイDBとして復旧する必要があります。
フェイルオーバーでは、最大パフォーマンス保護モード(非同期モード)を使用している場合、データの損失が発生する可能性があります。

スイッチオーバーの検証

それでは、スイッチオーバーから検証していきます。

  1. プライマリDBへSSH接続し、Data Guardコマンドライン・インタフェース(DGMGRL)を起動します。
    [oracle@db01 ~]$ dgmgrl /
    DGMGRL for Linux: Release 19.0.0.0.0 - Production on Fri Apr 4 11:06:02 2025
    Version 19.26.0.0.0
    
    Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Welcome to DGMGRL, type "help" for information.
    Connected to "cdborcl_vj4_nrt"
    Connected as SYSDG.
    DGMGRL>

     

  2. スイッチオーバー実行前の役割(ロール)とステータスを確認してみます。
    ※役割(ロール)とステータス確認には[show database <DB_UNIQUE_NAME>]コマンドを使用しています。
    DGMGRL> show database cdborcl_vj4_nrt
    
    Database - cdborcl_vj4_nrt
    
    Role: PRIMARY
    Intended State: TRANSPORT-ON
    Instance(s):
    cdborcl
    
    Database Status:
    SUCCESS
    
    DGMGRL> 
    DGMGRL> show database cdborcl_xm2_nrt
    
    Database - cdborcl_xm2_nrt
    
    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: 61.00 KByte/s
    Real Time Query: OFF
    Instance(s):
    cdborcl
    
    Database Status:
    SUCCESS
    
    DGMGRL>

    各DBの役割(ロール)とDatabase Statusが[SUCCESS]となっていることが確認できます。

     

  3. スイッチオーバーを実施する為、OCIコンソールのナビゲーション・メニューより、以下の順で画面を遷移していきます。
    [Oracle Database] – [Oracleベース・データベース・サービス] – [<プライマリDBのDBシステム名>] – [<データベース名>] – [Data Guardアソシエーション]
  4. Data Guardアソシエーション欄のメニューから[スイッチオーバー]を選択します。 
  5. データベース管理パスワードを入力して、[OK]をクリックします。 
  6. 作業リクエストから、最新の[Switchover Data Guard]が[成功]していることを確認します。 
  7. 新プライマリDBへSSH接続し、Data Guardコマンドライン・インタフェース(DGMGRL)を起動します。
    [oracle@db02 ~]$ dgmgrl /
    DGMGRL for Linux: Release 19.0.0.0.0 - Production on Fri Apr 4 11:12:58 2025
    Version 19.26.0.0.0
    
    Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Welcome to DGMGRL, type "help" for information.
    Connected to "cdborcl_xm2_nrt"
    Connected as SYSDG.
    DGMGRL>

     

  8. スイッチオーバー後の役割(ロール)とステータスを確認してみます。
    ※役割(ロール)とステータス確認には[show database <DB_UNIQUE_NAME>]コマンドを使用しています。
    DGMGRL> show database cdborcl_vj4_nrt
    
    Database - cdborcl_vj4_nrt
    
    Role: PHYSICAL STANDBY
    Intended State: APPLY-ON
    Transport Lag: 0 seconds (computed 0 seconds ago)
    Apply Lag: 0 seconds (computed 0 seconds ago)
    Average Apply Rate: 1.96 MByte/s
    Real Time Query: OFF
    Instance(s):
    cdborcl
    
    Database Status:
    SUCCESS
    
    DGMGRL> 
    DGMGRL> show database cdborcl_xm2_nrt
    
    Database - cdborcl_xm2_nrt
    
    Role: PRIMARY
    Intended State: TRANSPORT-ON
    Instance(s):
    cdborcl
    
    Database Status:
    SUCCESS
    
    DGMGRL>

    スイッチオーバー前後で役割(ロール)が切り替わっていて、Database Statusも[SUCCESS]となっていますので、問題なく、スイッチオーバーを実施することができました。
    ※再度同じ手順でスイッチオーバーを実施することで、役割(ロール)を元の状態に戻すことができます。

フェイルオーバーの検証

続いて、フェイルオーバーの検証をしていきます。

  1. フェイルオーバーを実施する為、OCIコンソールのナビゲーション・メニューより、以下の順で画面を遷移していきます。
    [Oracle Database] – [Oracleベース・データベース・サービス] – [<スタンバイDBのDBシステム名>] – [<データベース名>] – [Data Guardアソシエーション]
  2. Data Guardアソシエーション欄のメニューから[フェイルオーバー]を選択します。
  3. データベース管理パスワードを入力して、[OK]をクリックします。
  4. 作業リクエストから、最新の[Failover Data Guard]が[成功]していることを確認します。
  5. 新プライマリDBへSSH接続し、Data Guardコマンドライン・インタフェース(DGMGRL)を起動します。
    [oracle@db02 ~]$ dgmgrl /
    DGMGRL for Linux: Release 19.0.0.0.0 - Production on Fri Apr 4 11:32:35 2025
    Version 19.26.0.0.0
    
    Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Welcome to DGMGRL, type "help" for information.
    Connected to "cdborcl_xm2_nrt"
    Connected as SYSDG.
    DGMGRL>
  6. フェイルオーバー後の役割(ロール)とステータスを確認してみます。
    ※役割(ロール)とステータス確認には[show database <DB_UNIQUE_NAME>]コマンドを使用しています。
    DGMGRL> show database cdborcl_vj4_nrt
    
    Database - cdborcl_vj4_nrt
    
    Role: PHYSICAL STANDBY
    Intended State: APPLY-ON
    Transport Lag: (unknown)
    Apply Lag: (unknown)
    Average Apply Rate: (unknown)
    Real Time Query: OFF
    Instance(s):
    cdborcl
    
    Database Status:
    DISABLED - ORA-16661: the standby database needs to be reinstated
    
    DGMGRL> 
    DGMGRL> show database cdborcl_xm2_nrt
    
    Database - cdborcl_xm2_nrt
    
    Role: PRIMARY
    Intended State: TRANSPORT-ON
    Instance(s):
    cdborcl
    
    Database Status:
    SUCCESS
    
    DGMGRL>

    フェイルオーバー後で役割(ロール)が切り替わっており、プライマリDB側のDatabase Statusが[SUCCESS]となっていますので、フェイルオーバーは問題なく実施できていますが、スタンバイDB側のDatabase Statusが[DISABLED]で、復旧が必要というエラーが表示されていることを確認できます。

    この状態のままでは、プライマリDBとスタンバイDB間の同期ができない為、OCIコンソールから回復操作を実施して、スタンバイDBを復旧させていきます。
    回復操作を実施すると、Flashback Database機能で、データベースを障害発生前までデータを戻し、
    スタンバイDBとして、Data Guardへの再組み込みまでしてくれます。

  7. 回復操作を実施する為、OCIコンソールのナビゲーション・メニューより、以下の順で画面を遷移していきます。
    [Oracle Database] – [Oracleベース・データベース・サービス] – [<プライマリDBのDBシステム名>] – [<データベース名>] – [Data Guardアソシエーション] 
  8. Data Guardアソシエーション欄のメニューから[回復]を選択します。 
  9. データベース管理パスワードを入力して、[OK]をクリックします。 
  10. 作業リクエストから、最新の[Reinstate Data Guard]が[成功]していることを確認します。 
  11. 新プライマリDBへSSH接続し、Data Guardコマンドライン・インタフェース(DGMGRL)を起動します。
    [oracle@db02 ~]$ dgmgrl /
    DGMGRL for Linux: Release 19.0.0.0.0 - Production on Fri Apr 4 11:44:30 2025
    Version 19.26.0.0.0
    
    Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Welcome to DGMGRL, type "help" for information.
    Connected to "CDBORCL_XM2_NRT"
    Connected as SYSDG.
    DGMGRL>

     

  12. 回復操作後の役割(ロール)とステータスを確認してみます。
    ※役割(ロール)とステータス確認には[show database <DB_UNIQUE_NAME>]コマンドを使用しています。
    DGMGRL> show database cdborcl_vj4_nrt
    
    Database - cdborcl_vj4_nrt
    
    Role: PHYSICAL STANDBY
    Intended State: APPLY-ON
    Transport Lag: 0 seconds (computed 0 seconds ago)
    Apply Lag: 0 seconds (computed 0 seconds ago)
    Average Apply Rate: 166.00 KByte/s
    Real Time Query: OFF
    Instance(s):
    cdborcl
    
    Database Status:
    SUCCESS
    
    DGMGRL> 
    DGMGRL> show database cdborcl_xm2_nrt
    
    Database - cdborcl_xm2_nrt
    
    Role: PRIMARY
    Intended State: TRANSPORT-ON
    Instance(s):
    cdborcl
    
    Database Status:
    SUCCESS
    
    DGMGRL>

    回復操作実施後、スタンバイDB側のDatabase Statusが[DISABLED]から[SUCCESS]へ変更されています。
    エラー表示もなくなり、プライマリDBとスタンバイDB間での同期が再開されています。

    フェイルオーバー実施前の状態に戻す場合は、この状態でスイッチオーバーを実施し、役割(ロール)を切り替えます。

おわりに

今回は、Oracle Base Database Service(BaseDB)のData Guard操作について検証してみましたが、如何だったでしょうか。
構成の時と同様にData Guardとして必要な操作は基本的にOCIコンソールから実行できるので、非常に簡単かつ便利だと感じました。

最後までご覧頂き、ありがとうございました。

 

BaseDBはほかにもこんな記事があります!
BaseDB記事一覧

投稿者プロフィール

技術チーム
技術チーム
DBひとりでできるもんを盛り上げるべく、技術チームが立ち上がり早8年。ひとりでできるもんと言いつつ、技術者が読んでプッとなるような、極めてピンポイントでマニアックな技術ネタを執筆しています!
最新技術情報や資格情報をチェックしたいアナタ!毎日遊びに来てください。きっとお役に立てます。