Skip to main content
日本語は機械翻訳による参考訳です。内容に矛盾や不一致があった場合には、英語の内容が優先されます。

Google Cloud NetApp Volumes 上の Oracle Database 26ai 向けに Data Guard Broker と Fast-Start フェイルオーバーを構成する

共同作成者 netapp-jsnyder

専用のオブザーバーを使用してOracle Data Guard BrokerとFast-Start Failoverを構成し、Google Cloud NetApp Volumes上のOracle Database 26aiの自動ロール遷移を有効にします。

ティア固有: この手順は Prod HA (Data Guard + FSFO) ティアにのみ適用されます。

この手順では、両方のデータベースでブローカーを有効にすること、Data Guard 構成を作成すること、MaxAvailability 保護モードで FSFO を有効にすること、Observer ホストへの Oracle Instant Client のインストール、ウォレットベースの認証情報を使用した systemd サービスとしての Observer の起動、および切り替えとフェイルオーバーのテストについて説明します。後 ENABLE CONFIGURATION、トランスポートとロールは DGMGRL で管理します (アドホック LOG_ARCHIVE_DEST_* SQL ではなく)。

ステップ 1:Data Guard Broker を有効にする

両方のデータベースホストでData Guard Brokerを有効にし、プライマリデータベースとスタンバイデータベースを統合管理下に置くためのブローカー構成を作成します。

  1. プライマリおよびスタンバイのデータベースホストで以下を設定します dg_broker_start=TRUE

    sudo -u oracle bash -c '
    . ~/.bash_profile
    sqlplus / as sysdba <<SQL
    ALTER SYSTEM SET dg_broker_start=TRUE SCOPE=BOTH;
    EXIT
    SQL'
  2. プライマリ側で、OS認証を使用してDGMGRLに接続し、ブローカー構成を作成します。

    メモ

    Observer ホストでのみ、自動ログイン ウォレットが存在した後に `dgmgrl /@orcl`を使用します。 `dgmgrl`コマンド ラインにパスワードを入力しないでください。

    sudo -u oracle bash -c '
    export ORACLE_HOME=/u01/app/oracle/product/26ai/db_1
    export ORACLE_SID=orcl
    export PATH=$ORACLE_HOME/bin:$PATH
    dgmgrl /
    '
    DGMGRL> CREATE CONFIGURATION 'orcl_dg' AS
            PRIMARY DATABASE IS 'orcl' CONNECT IDENTIFIER IS orcl;
    DGMGRL> ADD DATABASE 'orcls' AS CONNECT IDENTIFIER IS orcls;
    DGMGRL> ENABLE CONFIGURATION;
    DGMGRL> SHOW CONFIGURATION;
    -- Expect: Configuration Status: SUCCESS, both members SUCCESS.
  3. 構成を検証します。 `WARNING`またはNULL以外 `ERROR`をステップ3:FSFOプロパティを設定して有効にするの前に修正してください:

    DGMGRL> VALIDATE DATABASE 'orcls';
    DGMGRL> SHOW CONFIGURATION VERBOSE;

ステップ2:FSFOのフラッシュバックを確認する

両方のホストでフラッシュバックデータベースが有効になっていることを確認してください。FSFOの自動復旧にはフラッシュバックが必要です。これにより、フェイルオーバー後に以前のプライマリがスタンバイとして自動的に構成に復帰できるようになります。

  1. 両方のデータベースホストで `flashback_on`が `YES`であることを確認します:

    sudo -u oracle bash -c '
    . ~/.bash_profile
    sqlplus -s / as sysdba <<<"SELECT flashback_on FROM v\$database;"
    '
    # Expected on both hosts: YES
  2. プライマリデバイスのみで、フラッシュバック保持がまだ設定されていない場合:

    sudo -u oracle bash -c '
    . ~/.bash_profile
    export ORACLE_SID=orcl
    sqlplus / as sysdba <<SQL
    ALTER SYSTEM SET db_flashback_retention_target=1440 SCOPE=BOTH;
    EXIT
    SQL'

ステップ3:FSFOの設定と有効化

SYNC リドゥ転送を設定し、MaxAvailability 保護モードを構成し、各データベースで FSFO ターゲットを定義して、Fast-Start Failover を有効にします。

  1. 両方のデータベースでリドゥ転送モードを `SYNC`に設定し、保護モードを `MaxAvailability`に上げます:

    DGMGRL> EDIT DATABASE 'orcl'  SET PROPERTY LogXptMode='SYNC';
    DGMGRL> EDIT DATABASE 'orcls' SET PROPERTY LogXptMode='SYNC';
    DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MaxAvailability;
  2. 各データベースが互いをフェイルオーバーターゲットとして指定するようにFSFOターゲットを設定し、しきい値と自動復旧動作を構成します:

    -- Each side names the other
    DGMGRL> EDIT DATABASE 'orcl'  SET PROPERTY FastStartFailoverTarget = 'orcls';
    DGMGRL> EDIT DATABASE 'orcls' SET PROPERTY FastStartFailoverTarget = 'orcl';
    
    -- 30 s is the default; lower for faster RTO but more sensitive to network blips
    DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold = 30;
    DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverAutoReinstate = TRUE;
  3. 高速フェイルオーバーを有効にして、設定を確認します。

    DGMGRL> ENABLE FAST_START FAILOVER;
    DGMGRL> SHOW FAST_START FAILOVER;
    -- Expected: Threshold 30 seconds, Target orcls, Observer not yet registered.

ステップ4:オブザーバーにInstant Clientをインストールする

専用のオブザーバーVM((oradg-obs)にOracle Instant Clientをインストールし、専用の oracle OSユーザーを作成して、ObserverがTCP/1521で両方のデータベースメンバーに接続できるようにOracle Net環境を構成します。

  1. ObserverホストにOracle Instant Clientパッケージをインストールします((oradg-obs):

    # Use -el8 / -el9 if the Observer is on an older OL/RHEL release
    sudo dnf install -y oracle-instantclient-release-el10
    sudo dnf install -y oracle-instantclient-basic \
                        oracle-instantclient-sqlplus \
                        oracle-instantclient-tools
  2. ウォレットとsystemdユニットを所有する専用の oracle OSユーザーを作成します:

    sudo useradd -u 54321 -m oracle
    sudo passwd -l oracle
  3. Oracle Net 環境を構成し、両方のデータベースホストのエントリを含む `tnsnames.ora`を作成します:

    sudo mkdir -p /etc/oracle/network/admin
    sudo chown -R oracle:oracle /etc/oracle
    
    sudo -u oracle tee /home/oracle/.bash_profile >/dev/null <<'EOF'
    export ORACLE_HOME=/usr/lib/oracle/26/client64
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib
    export PATH=$ORACLE_HOME/bin:$PATH
    export TNS_ADMIN=/etc/oracle/network/admin
    EOF
    
    # tnsnames.ora — must reach both DB hosts on TCP/1521
    sudo tee /etc/oracle/network/admin/tnsnames.ora >/dev/null <<'EOF'
    orcl =
      (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oracdb1)(PORT = 1521))
                    (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl)))
    orcls =
      (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oracdb2)(PORT = 1521))
                    (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcls)))
    EOF
    sudo chown oracle:oracle /etc/oracle/network/admin/tnsnames.ora

ステップ5:Observerをsystemdサービスとして実行する

両方のデータベースメンバーの認証情報を含む自動ログインウォレットを作成し、Observerをsystemdサービスとして設定および起動して、再起動後も動作し、自動的に設定に再接続するようにします。

専用の Data Guard 管理アカウント(たとえば、 SYSDG)の資格情報は、 SYS ではなくウォレットに保存します。資格情報は、 psjournalctl から確認できる状態になってしまうため、 dgmgrl コマンドライン上には絶対に表示させないでください。Observer では常に /@<tns_alias> を使用して接続してください。

  1. 暗号化ウォレットを作成し、両方のデータベースメンバーの認証情報を入力します。

    sudo -iu oracle bash <<'BASH'
    mkdir -p $TNS_ADMIN/wallet
    mkstore -wrl $TNS_ADMIN/wallet -create     # prompts for a wallet password — store in your secrets manager
    mkstore -wrl $TNS_ADMIN/wallet -createCredential orcl  sys ChangeMe!1
    mkstore -wrl $TNS_ADMIN/wallet -createCredential orcls sys ChangeMe!1
    BASH
    
    sudo tee /etc/oracle/network/admin/sqlnet.ora >/dev/null <<'EOF'
    WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /etc/oracle/network/admin/wallet)))
    SQLNET.WALLET_OVERRIDE = TRUE
    EOF
    sudo chown oracle:oracle /etc/oracle/network/admin/sqlnet.ora
    sudo chmod -R 0700 /etc/oracle/network/admin/wallet
    
    sudo -iu oracle ls -l /etc/oracle/network/admin/wallet
    # Expected: cwallet.sso and ewallet.p12
    
    sudo -iu oracle bash <<'BASH'
    sqlplus -L "/@orcl as sysdba" <<'SQL'
    SELECT database_role FROM v$database;
    EXIT
    SQL
    BASH
    
    sudo -iu oracle bash <<'BASH'
    sqlplus -L "/@orcls as sysdba" <<'SQL'
    SELECT database_role FROM v$database;
    EXIT
    SQL
    BASH
    
    sudo -iu oracle dgmgrl /@orcl  'SHOW CONFIGURATION;'
    sudo -iu oracle dgmgrl /@orcls 'SHOW CONFIGURATION;'
  2. Observerのsystemdサービスがパスワードの入力プロンプトなしで起動できるように、自動ログインウォレット cwallet.sso)を生成します。 `mkstore`の実行後に `cwallet.sso`がない場合は、Instant Clientツールパッケージまたはデータベースホームの `orapki`を使用して作成し、保存されている資格情報を再追加します:

    sudo -iu oracle orapki wallet create \
      -wallet /etc/oracle/network/admin/wallet \
      -auto_login
    sudo -iu oracle ls -l /etc/oracle/network/admin/wallet
    # Expected: cwallet.sso and ewallet.p12
  3. systemd ユニットを作成し、サービスを有効にして、オブザーバーが接続されていることを確認します:

    sudo tee /etc/systemd/system/dgmgrl-observer.service >/dev/null <<'EOF'
    [Unit]
    Description=Oracle Data Guard Fast-Start Failover Observer
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=simple
    User=oracle
    Group=oracle
    Environment=ORACLE_HOME=/usr/lib/oracle/26/client64
    Environment=LD_LIBRARY_PATH=/usr/lib/oracle/26/client64/lib
    Environment=TNS_ADMIN=/etc/oracle/network/admin
    Environment=PATH=/usr/lib/oracle/26/client64/bin:/usr/bin:/bin
    ExecStart=/usr/lib/oracle/26/client64/bin/dgmgrl -silent /@orcl "START OBSERVER FILE IS '/var/lib/oracle/dgmgrl-observer.dat'"
    Restart=always
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    EOF
    sudo install -d -o oracle -g oracle -m 0755 /var/lib/oracle
    sudo install -o oracle -g oracle -m 0640 /dev/null /var/log/dgmgrl-observer.log
    
    sudo tee /etc/logrotate.d/dgmgrl-observer >/dev/null <<'EOF'
    /var/log/dgmgrl-observer.log {
        weekly
        rotate 8
        compress delaycompress missingok notifempty
        create 0640 oracle oracle
        copytruncate
    }
    EOF
    
    sudo systemctl daemon-reload && sudo systemctl enable --now dgmgrl-observer.service
    sudo systemctl status dgmgrl-observer.service

    オブザーバーはプライマリから読み取る必要があります CONNECTED( `DISCONNECTED`オブザーバーは暗黙的にFSFOを停止します):

    DGMGRL> SHOW FAST_START FAILOVER;
    DGMGRL> SHOW CONFIGURATION;       -- Configuration Status: SUCCESS, FSFO: ENABLED

ステップ6:FSFOをテストする

Data Guard の構成を `VALIDATE DATABASE`で検証し、次に計画的なスイッチオーバーを実行して、テスト期間中に計画外の VM リセット フェイルオーバーを実行し、FSFO がエンドツーエンドで正常に動作していることを確認します。

  1. 計画された切り替えをテストし、元のトポロジを復元します。

    DGMGRL> VALIDATE DATABASE 'orcls';
    DGMGRL> SWITCHOVER TO 'orcls';
    DGMGRL> SHOW CONFIGURATION;
    DGMGRL> SWITCHOVER TO 'orcl';        -- restore topology
  2. 制御されたテストウィンドウ内で、VM のリセットを使用して計画外のフェイルオーバーをテストします。

    VMの*リセット*(クラッシュ形式のテスト)を使用してください。通常の*停止*ではFSFOがトリガーされない場合があります。 `/var/log/dgmgrl-observer.log`tail `oradg-obs`を使用してフェイルオーバーの進行状況を監視し、完了したらトポロジーを復元してください。

次の手順

このデプロイメントでは、Oracle Data Guard Broker、Fast-Start Failover、およびObserverの構成が完了しました。