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

TR-5002:『Oracle Active Data Guard Cost Reduction with Azure NetApp Files』

共同作成者

ネットアップ、Niyaz Mohamed、Allen Cao氏

このソリューションでは、AzureクラウドでOracle Data Guard HA / DRソリューションのライセンスコストと運用コストを削減するために、Microsoft Azure NetApp Files(ANF)をプライマリおよびスタンバイデータベースストレージとして使用してOracle Data Guardを設定する方法の概要と詳細について説明します。

目的

Oracle Data Guardは、プライマリデータベースとスタンバイデータベースのレプリケーション構成内のエンタープライズデータの高可用性、データ保護、ディザスタリカバリを実現します。Oracle Active Data Guardを使用すると、プライマリデータベースからスタンバイデータベースへのデータレプリケーションをアクティブにしながら、ユーザはスタンバイデータベースにアクセスできます。Data GuardはOracle Database Enterprise Editionの機能です。個別のライセンスは必要ありません。一方、Active Data GuardはOracle Database Enterprise Editionオプションであるため、別途ライセンスが必要です。Active Data Guard環境のプライマリデータベースから、複数のスタンバイデータベースからデータレプリケーションを受信できます。ただし、スタンバイデータベースを追加するたびに、Active Data Guardライセンスが必要になり、プライマリデータベースのサイズとしてストレージを追加する必要があります。運用コストはあっという間に増大します。

Oracleデータベースの運用コストを削減したいと考えていて、AzureクラウドにActive Data Guardをセットアップする予定がある場合は、別の方法を検討してください。プライマリデータベースからAzure NetApp Filesストレージ上の単一の物理スタンバイデータベースにレプリケートする場合は、Active Data Guardの代わりにData Guardを使用します。その後、このスタンバイデータベースの複数のコピーをクローニングして読み取り/書き込みアクセス用にオープンし、レポート作成、開発、テストなど、他の多くのユースケースに対応できます。最終的な結果は、Active Data Guardの機能を効果的に提供しながら、Active Data Guardのライセンスを不要にします。このドキュメントでは、ANFストレージ上の既存のプライマリデータベースおよび物理スタンバイデータベースを使用してOracle Data Guardをセットアップする方法を説明します。スタンバイデータベースは、必要に応じてNetApp SnapCenterデータベース管理ツールを使用して、読み取り/書き込みアクセス用にバックアップおよびクローニングされます。また、NetAppソリューションエンジニアリングチームは、ユーザの介入を必要とせずに、完全かつ自動化されたデータベースクローンライフサイクル管理を実現するための自動化ツールキットも提供しています。

この解決策 は、次のユースケースに対応します。

  • 複数のAzureリージョンにわたるMicrosoft Azure NetApp Filesストレージ上のプライマリデータベースと物理スタンバイデータベースの間にOracle Data Guardを実装します。

  • レポート作成、開発、テストなどのユースケースに対応するために、物理スタンバイデータベースのバックアップとクローニングを行います。

  • 自動化によるOracleデータベースのクローン更新ライフサイクル管理

対象者

この解決策 は、次のユーザーを対象としています。

  • 高可用性、データ保護、ディザスタリカバリを実現するためにAzureクラウドにOracle Active Data GuardをセットアップするDBAです。

  • AzureクラウドでのOracle Active Data Guardの構成に関心をお持ちのデータベースソリューションアーキテクト。

  • Oracle Data GuardをサポートするAzure NetApp Filesストレージを管理するストレージ管理者。

  • Azureクラウド環境でOracle Data Guardを立ち上げることを好むアプリケーション所有者。

解決策 のテストおよび検証環境

このソリューションのテストと検証は、実際のユーザ導入環境とは一致しない可能性があるAzureクラウドラボ環境で実行されました。詳細については、を参照してください 導入にあたって考慮すべき主な要因

アーキテクチャ

この画像は、ANF上のAzureクラウドでのOracle Data Guardの実装の詳細を示しています。

ハードウェアおよびソフトウェアコンポーネント

* ハードウェア *

Azure NetApp Files の特長

Microsoftが提供する最新バージョン

3TiB容量プール×2、Standardサービスレベル、自動QoS

DBサーバ用Azure VM

標準B4ミリ秒(vCPU×4、メモリ:16GiB)

3つのDB VM(1つはプライマリDBサーバ、1つはスタンバイDBサーバ、3つ目はクローンDBサーバ)

ソフトウェア

Red Hat Linux

Red Hat Enterprise Linux 8.6(LVM)- x64 Gen2

テスト用にRedHatサブスクリプションを導入

Oracle データベース

バージョン19.18

RUパッチp34765931_190000_Linux-x86-64.zipを適用しました

Oracle OPatchの略

バージョン12.2.0.1.36

最新のパッチp6880880_190000_Linux-x86-64.zip

SnapCenter

バージョン6.0.1

ビルド6.0.1.4487

NFS

バージョン 3.0 以降

OracleでDNFSが有効

NYからLAへのDRを想定したOracle Data Guard構成

* データベース *

* DB_UNIQUE_NAME *

* Oracle Net Service Name *

プライマリ

NTAP_NY

NTAP_NY.internal.cloudapp.net

スタンバイ

NTAP_LA

NTAP_LA.internal.cloudapp.net

導入にあたって考慮すべき主な要因

  • *スタンバイデータベースクローン*プライマリデータベースからトランザクションログを受信して適用する際に、物理スタンバイデータベースのクローンを作成してDB VMにマウントすることで、開発、テスト、レポートなどの他のワークロードをサポートできます。クローンは、シンクローンでもシッククローンでもかまいません。現時点では、ANFでサポートされるのは、スタンバイデータベースのフルコピーであるシッククローンのみです。ANFシンクローンオプションはまもなくリリースされます。データベースボリュームのシンクローニングコピーの場合、スタンバイデータベースの同じDBボリュームを共有し、copy-on-writeテクノロジを使用して書き込みI/Oに対応します。そのため、クローンは非常にストレージ効率に優れているため、新しい書き込みI/Oに最小限の容量を追加して新しいストレージを割り当てるだけで、他の多くのユースケースにも使用できます。これにより、Active Data Guardストレージの設置面積が大幅に削減され、ストレージコストを大幅に削減できます。NetAppでは、データベースがプライマリストレージからスタンバイANFストレージに切り替わった場合にFlexCloneの処理を最小限に抑えて、高いレベルのパフォーマンスを維持することを推奨しています。

  • * Oracleソフトウェア要件。*一般に、物理スタンバイデータベースは、パッチセット例外(PSE)、重要なパッチアップデート(CPU)など、プライマリデータベースと同じバージョンのDatabase Homeを使用する必要があります。 Oracle Data Guard Standby-First Patch Applyプロセスが進行中でない場合(My Oracle Support note 1265700.1 "support.oracle.com"

  • *スタンバイデータベースディレクトリ構造に関する考慮事項*可能であれば、プライマリシステムとスタンバイシステムのデータファイル、ログファイル、および制御ファイルは同じ名前とパス名を使用し、最適なFlexible Architecture(OFA)命名規則を使用する必要があります。スタンバイデータベースのアーカイブディレクトリも、サイズや構造など、サイト間で同一である必要があります。この戦略により、バックアップ、スイッチオーバー、フェイルオーバーなどの他の操作でも同じ手順を実行できるため、メンテナンスの複雑さが軽減されます。

  • *強制ログモード。*スタンバイデータベースに伝播できないプライマリデータベースのログされていない直接書き込みから保護するには、スタンバイ作成のデータファイルバックアップを実行する前に、プライマリデータベースで強制ログをオンにします。

  • * Azure VMのサイジング*今回のテストと検証では、4つのvCPUと16GiBメモリを搭載したAzure VM-Standard_B4msを使用しました。実際のワークロード要件に基づいて、vCPUの数とRAMの容量に合わせてAzure DB VMのサイズを適切に設定する必要があります。

  • * Azure NetApp Files構成*Azure NetApp Filesは、Azure NetAppストレージアカウントでとして割り当てられ `Capacity Pools`ます。今回のテストと検証では、東部リージョンでOracleプライマリをホストし、西部2リージョンでスタンバイデータベースをホストするために3TiBの容量プールを導入しました。ANF容量プールには、Standard、Premium、Ultraという3つのサービスレベルがあります。  ANF容量プールのIO容量は、容量プールのサイズとそのサービスレベルに基づきます。本番環境ではNetApp、Oracleデータベースのスループット要件を完全に評価し、それに応じてデータベース容量プールをサイジングすることを推奨します。容量プールの作成時に、QoSを[Auto]または[Manual]に設定し、保存データの暗号化を[Single]または[Double]に設定できます。  

  • * dNFS構成*ANFストレージを備えたAzure仮想マシンで実行されるOracleデータベースでは、dNFSを使用することで、ネイティブのNFSクライアントに比べて大幅に多くのI/Oを処理できます。NetApp Automation Toolkitを使用したOracleの自動導入で、NFSv3ではdNFSが自動的に設定されます。

解決策 の導入

ここでは、Oracle Data Guardをセットアップするための出発点として、VNet内のAzureクラウド環境にプライマリOracleデータベースがすでに導入されていることを前提としています。プライマリデータベースをNFSマウントでANFストレージに導入するのが理想的です。Oracleデータベースストレージ用に3つのNFSマウントポイントが作成されます。Oracleバイナリファイル用にmount/u01、Oracleデータファイルと制御ファイル用にmount/u02、Oracleの現在のログファイルとアーカイブログファイル用にmount/u03、冗長制御ファイル1つです。

プライマリOracleデータベースは、Azureエコシステムまたはプライベートデータセンター内のNetApp ONTAPストレージやその他の任意のストレージで実行することもできます。次のセクションでは、ANFストレージを使用するAzureのプライマリOracle DBと、ANFストレージを使用するAzureの物理スタンバイOracle DBとの間にOracle Data Guardを設定する手順を説明します。

導入の前提条件

Details

導入には、次の前提条件が必要です。

  1. Azureクラウドアカウントがセットアップされ、必要なVNetとネットワークサブネットがAzureアカウント内に作成されている。

  2. Azureクラウドポータルコンソールから、最低3つのAzure Linux VMを導入する必要があります。1つはプライマリOracle DBサーバ、もう1つはスタンバイOracle DBサーバ、およびレポート作成、開発、テスト用のクローンターゲットDBサーバなどです。環境のセットアップの詳細については、前のセクションのアーキテクチャ図を参照してください。詳細については、Microsoftを参照して"Azure 仮想マシン"ください。

  3. プライマリOracleデータベースがプライマリOracle DBサーバにインストールされ、設定されている必要があります。一方、スタンバイOracle DBサーバまたはクローンOracle DBサーバには、Oracleソフトウェアのみがインストールされ、Oracleデータベースは作成されません。OracleファイルディレクトリのレイアウトがすべてのOracle DBサーバで完全に一致することを推奨します。AzureクラウドとANFへのOracleの自動導入に関するNetAppの推奨事項の詳細については、次のテクニカルレポートを参照してください。

  4. Azureクラウドポータルコンソールで、OracleデータベースボリュームをホストするためのANFストレージ容量プールを2つ導入します。ANFストレージ容量プールは、真のDataGuard構成を再現するために、別 々 のリージョンに配置する必要があります。ANFストレージの導入方法に詳しくない場合は、のドキュメントで詳細な手順を参照してください"クイックスタート: Azure NetApp Files をセットアップし、 NFS ボリュームを作成します"

    Azure環境の設定を示すスクリーンショット。

  5. プライマリOracleデータベースとスタンバイOracleデータベースが2つの異なるリージョンに配置されている場合は、2つの独立したVNet間のデータトラフィックフローを許可するようにVPNゲートウェイを設定する必要があります。Azureのネットワーク構成の詳細については、本ドキュメントでは取り上げません。次のスクリーンショットは、VPNゲートウェイの設定方法、接続方法、およびデータトラフィックフローの確認方法を示しています。

    ラボVPNゲートウェイ:Azure環境の設定を示すスクリーンショット。

    プライマリVNetゲートウェイ:Azure環境の設定を示すスクリーンショット。

    VNetゲートウェイの接続ステータス:Azure環境の設定を示すスクリーンショット。

    トラフィックフローが確立されていることを確認します(3つの点をクリックしてページを開きます)。Azure環境の設定を示すスクリーンショット。

Data Guardのプライマリデータベースの準備

Details

このデモでは、プライマリAzure DBサーバにNTAPという名前のプライマリOracleデータベースをセットアップし、3つのNFSマウントポイント(Oracleバイナリ用に/u01、Oracleデータファイル用に/u02、Oracle制御ファイル用に/u03、Oracleのアクティブログ、アーカイブログファイル、冗長Oracle制御ファイル用に/u03)を設定します。次に、Oracle Data Guard保護用にプライマリデータベースを設定するための詳細な手順を示します。すべての手順は、Oracleデータベースの所有者またはデフォルトのユーザとして実行する必要があります oracle

  1. プライマリAzure DBサーバorap.internal.cloudapp.net上のプライマリデータベースNTAPは、最初はスタンドアロンデータベースとして導入され、ANFはデータベースストレージとして導入されます。

    orap.internal.cloudapp.net:
    resource group: ANFAVSRG
    Location: East US
    size: Standard B4ms (4 vcpus, 16 GiB memory)
    OS: Linux (redhat 8.6)
    pub_ip: 172.190.207.231
    pri_ip: 10.0.0.4
    
    [oracle@orap ~]$ df -h
    Filesystem                 Size  Used Avail Use% Mounted on
    devtmpfs                   7.7G  4.0K  7.7G   1% /dev
    tmpfs                      7.8G     0  7.8G   0% /dev/shm
    tmpfs                      7.8G  209M  7.5G   3% /run
    tmpfs                      7.8G     0  7.8G   0% /sys/fs/cgroup
    /dev/mapper/rootvg-rootlv   22G  413M   22G   2% /
    /dev/mapper/rootvg-usrlv    10G  2.1G  8.0G  21% /usr
    /dev/sda1                  496M  181M  315M  37% /boot
    /dev/mapper/rootvg-homelv  2.0G   47M  2.0G   3% /home
    /dev/sda15                 495M  5.8M  489M   2% /boot/efi
    /dev/mapper/rootvg-varlv   8.0G  1.1G  7.0G  13% /var
    /dev/mapper/rootvg-tmplv    12G  120M   12G   1% /tmp
    /dev/sdb1                   32G   49M   30G   1% /mnt
    10.0.2.36:/orap-u02        500G  7.7G  493G   2% /u02
    10.0.2.36:/orap-u03        450G  6.1G  444G   2% /u03
    10.0.2.36:/orap-u01        100G  9.9G   91G  10% /u01
    
    [oracle@orap ~]$ cat /etc/oratab
    #
    
    
    
    # This file is used by ORACLE utilities.  It is created by root.sh
    # and updated by either Database Configuration Assistant while creating
    # a database or ASM Configuration Assistant while creating ASM instance.
    
    # A colon, ':', is used as the field terminator.  A new line terminates
    # the entry.  Lines beginning with a pound sign, '#', are comments.
    #
    # Entries are of the form:
    #   $ORACLE_SID:$ORACLE_HOME:<N|Y>:
    #
    # The first and second fields are the system identifier and home
    # directory of the database respectively.  The third field indicates
    # to the dbstart utility that the database should , "Y", or should not,
    # "N", be brought up at system boot time.
    #
    # Multiple entries with the same $ORACLE_SID are not allowed.
    #
    #
    NTAP:/u01/app/oracle/product/19.0.0/NTAP:N
  2. OracleユーザとしてプライマリDBサーバにログインします。sqlplusを使用してデータベースにログインし'プライマリで強制ログを有効にします

    alter database force logging;
    [oracle@orap admin]$ sqlplus / as sysdba
    
    SQL*Plus: Release 19.0.0.0.0 - Production on Tue Nov 26 20:12:02 2024
    Version 19.18.0.0.0
    
    Copyright (c) 1982, 2022, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.18.0.0.0
    
    SQL> alter database force logging;
    
    Database altered.
  3. sqlplusから、プライマリDBのフラッシュバックを有効にします。Flashbackを使用すると、フェールオーバー後にプライマリデータベースをスタンバイとして簡単に復元できます。

    alter database flashback on;
    SQL> alter database flashback on;
    
    Database altered.
  4. Oracleパスワードファイルを使用したREDO転送認証の設定- orapwdユーティリティを使用してプライマリにpwdファイルを作成します(設定されていない場合)。スタンバイデータベースの$ORACLE_HOME/dbsディレクトリにコピーします。

  5. プライマリDBに、現在のオンラインログファイルと同じサイズのスタンバイREDOログを作成します。ロググループは、1つ以上のオンラインログファイルグループです。これにより、プライマリデータベースは、フェイルオーバーが発生してREDOデータの受信を開始したときに、すぐにスタンバイロールに移行できます。次のコマンドを4回繰り返して、4つのスタンバイログファイルを作成します。

    alter database add standby logfile thread 1 size 200M;
    SQL> alter database add standby logfile thread 1 size 200M;
    
    Database altered.
    
    SQL> /
    
    Database altered.
    
    SQL> /
    
    Database altered.
    
    SQL> /
    
    Database altered.
    
    
    SQL> set lin 200
    SQL> col member for a80
    SQL> select group#, type, member from v$logfile;
    
        GROUP# TYPE    MEMBER
    ---------- ------- --------------------------------------------------------------------------------
             3 ONLINE  /u03/orareco/NTAP/onlinelog/redo03.log
             2 ONLINE  /u03/orareco/NTAP/onlinelog/redo02.log
             1 ONLINE  /u03/orareco/NTAP/onlinelog/redo01.log
             4 STANDBY /u03/orareco/NTAP/onlinelog/o1_mf_4__2m115vkv_.log
             5 STANDBY /u03/orareco/NTAP/onlinelog/o1_mf_5__2m3c5cyd_.log
             6 STANDBY /u03/orareco/NTAP/onlinelog/o1_mf_6__2m4d7dhh_.log
             7 STANDBY /u03/orareco/NTAP/onlinelog/o1_mf_7__2m5ct7g1_.log
  6. sqlplusから'spfileからpfileを作成して編集します

    create pfile='/home/oracle/initNTAP.ora' from spfile;
  7. pfileを修正し、次のパラメータを追加します。

    vi /home/oracle/initNTAP.ora
    Update the following parameters if not set:
    
    DB_NAME=NTAP
    DB_UNIQUE_NAME=NTAP_NY
    LOG_ARCHIVE_CONFIG='DG_CONFIG=(NTAP_NY,NTAP_LA)'
    LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=NTAP_NY'
    LOG_ARCHIVE_DEST_2='SERVICE=NTAP_LA ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=NTAP_LA'
    REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
    FAL_SERVER=NTAP_LA
    STANDBY_FILE_MANAGEMENT=AUTO
  8. sqlplusから'修正されたpfileからspfileを再作成して'$ORACLE_HOME/dbsディレクトリ内の既存のspfileを上書きします

    create spfile='$ORACLE_HOME/dbs/spfileNTAP.ora' from pfile='/home/oracle/initNTAP.ora';
  9. $ORACLE_HOME/network/adminディレクトリのOracle tnsnames.oraを変更して、名前解決のためにdb_unique_nameを追加します。

    vi $ORACLE_HOME/network/admin/tnsnames.ora
    # tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.0.0/NTAP/network/admin/tnsnames.ora
    # Generated by Oracle configuration tools.
    
    NTAP_NY =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = orap.internal.cloudapp.net)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SID = NTAP)
        )
      )
    
    NTAP_LA =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = oras.internal.cloudapp.net)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SID = NTAP)
        )
      )
    
    LISTENER_NTAP =
      (ADDRESS = (PROTOCOL = TCP)(HOST = orap.internal.cloudapp.net)(PORT = 1521))
    メモ Azure DBサーバにデフォルトとは異なる名前を付ける場合は、ホスト名を解決するためにローカルホストファイルに名前を追加します。
  10. プライマリデータベースのデータガードサービス名NTAP_NY_DGMGRL.internal.cloudapp.netをlistener.oraファイルに追加します。

    vi $ORACLE_HOME/network/admin/listener.ora
    # listener.ora Network Configuration File: /u01/app/oracle/product/19.0.0/NTAP/network/admin/listener.ora
    # Generated by Oracle configuration tools.
    
    LISTENER.NTAP =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = orap.internal.cloudapp.net)(PORT = 1521))
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        )
      )
    
    SID_LIST_LISTENER.NTAP =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = NTAP_NY_DGMGRL.internal.cloudapp.net)
          (ORACLE_HOME = /u01/app/oracle/product/19.0.0/NTAP)
          (SID_NAME = NTAP)
        )
      )
  11. sqlplusを使用してデータベースをシャットダウンして再起動し'データ・ガード・パラメータがアクティブになったことを確認します

    shutdown immediate;
    startup;
    SQL> show parameter name
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    cdb_cluster_name                     string
    cell_offloadgroup_name               string
    db_file_name_convert                 string
    db_name                              string      NTAP
    db_unique_name                       string      NTAP_NY
    global_names                         boolean     FALSE
    instance_name                        string      NTAP
    lock_name_space                      string
    log_file_name_convert                string
    pdb_file_name_convert                string
    processor_group_name                 string
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    service_names                        string      NTAP_NY.internal.cloudapp.net
    SQL> sho parameter log_archive_dest
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    log_archive_dest                     string
    log_archive_dest_1                   string      LOCATION=USE_DB_RECOVERY_FILE_
                                                     DEST VALID_FOR=(ALL_LOGFILES,A
                                                     LL_ROLES) DB_UNIQUE_NAME=NTAP_
                                                     NY
    log_archive_dest_10                  string
    log_archive_dest_11                  string
    log_archive_dest_12                  string
    log_archive_dest_13                  string
    log_archive_dest_14                  string
    log_archive_dest_15                  string
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    log_archive_dest_16                  string
    log_archive_dest_17                  string
    log_archive_dest_18                  string
    log_archive_dest_19                  string
    log_archive_dest_2                   string      SERVICE=NTAP_LA ASYNC VALID_FO
                                                     R=(ONLINE_LOGFILES,PRIMARY_ROL
                                                     E) DB_UNIQUE_NAME=NTAP_LA
    log_archive_dest_20                  string
    log_archive_dest_21                  string
    .
    .

これで、Data Guardのプライマリデータベースのセットアップは完了です。

スタンバイデータベースの準備とData Guardのアクティブ化

Details

Oracle Data Guardを使用するには、OSカーネル構成とOracleソフトウェアスタック(スタンバイDBサーバにパッチセットを含む)がプライマリDBサーバと一致する必要があります。管理を簡易化するためには、データベースディレクトリのレイアウトやNFSマウントポイントのサイズなど、スタンバイDBサーバのデータベースストレージ構成もプライマリDBサーバと同じにすることが理想的です。次に、スタンバイOracle DBサーバのセットアップとOracle DataGuardのアクティブ化によるHA/DR保護の詳細な手順を示します。すべてのコマンドは、デフォルトのOracle所有者ユーザIDとして実行する必要があります oracle

  1. まず、プライマリOracle DBサーバ上のプライマリデータベースの構成を確認します。このデモでは、プライマリDBサーバにNTAPというプライマリOracleデータベースをセットアップし、ANFストレージに3つのNFSマウントを配置しました。

  2. NetAppのドキュメントTR-4987に従ってOracleスタンバイDBサーバをセットアップする場合は、の手順2の `Playbook execution`"TR-4987:『Simplified、Automated Oracle Deployment on Azure NetApp Files with NFS』"タグを使用し `-t software_only_install`て、Oracleの自動インストールを実行します。変更されたコマンド構文を次に示します。このタグを使用すると、Oracleソフトウェアスタックのインストールと設定が可能になりますが、データベースの作成は完了しません。

    ansible-playbook -i hosts 4-oracle_config.yml -u azureuser -e @vars/vars.yml -t software_only_install
  3. デモラボのスタンバイサイトのスタンバイOracle DBサーバ構成。

    oras.internal.cloudapp.net:
    resource group: ANFAVSRG
    Location: West US 2
    size: Standard B4ms (4 vcpus, 16 GiB memory)
    OS: Linux (redhat 8.6)
    pub_ip: 172.179.119.75
    pri_ip: 10.0.1.4
    
    [oracle@oras ~]$ df -h
    Filesystem                 Size  Used Avail Use% Mounted on
    devtmpfs                   7.7G     0  7.7G   0% /dev
    tmpfs                      7.8G     0  7.8G   0% /dev/shm
    tmpfs                      7.8G  265M  7.5G   4% /run
    tmpfs                      7.8G     0  7.8G   0% /sys/fs/cgroup
    /dev/mapper/rootvg-rootlv   22G  413M   22G   2% /
    /dev/mapper/rootvg-usrlv    10G  2.1G  8.0G  21% /usr
    /dev/sda1                  496M  181M  315M  37% /boot
    /dev/mapper/rootvg-varlv   8.0G  985M  7.1G  13% /var
    /dev/mapper/rootvg-homelv  2.0G   52M  2.0G   3% /home
    /dev/mapper/rootvg-tmplv    12G  120M   12G   1% /tmp
    /dev/sda15                 495M  5.8M  489M   2% /boot/efi
    /dev/sdb1                   32G   49M   30G   1% /mnt
    10.0.3.36:/oras-u01        100G  9.5G   91G  10% /u01
    10.0.3.36:/oras-u02        500G  8.1G  492G   2% /u02
    10.0.3.36:/oras-u03        450G  4.8G  446G   2% /u03
  4. Oracleソフトウェアのインストールと設定が完了したら、Oracleホームとパスを設定します。また、スタンバイ$ORACLE_HOME dbsディレクトリからOracleパスワードをコピーしていない場合は、プライマリデータベースからコピーします。

    export ORACLE_HOME=/u01/app/oracle/product/19.0.0/NTAP
    export PATH=$PATH:$ORACLE_HOME/bin
    scp oracle@10.0.0.4:$ORACLE_HOME/dbs/orapwNTAP .
  5. tnsnames.oraファイルを次のエントリで更新します。

    vi $ORACLE_HOME/network/admin/tnsnames.ora
    # tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.0.0/NTAP/network/admin/tnsnames.ora
    # Generated by Oracle configuration tools.
    
    NTAP_NY =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = orap.internal.cloudapp.net)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SID = NTAP)
        )
      )
    
    NTAP_LA =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = oras.internal.cloudapp.net)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SID = NTAP)
        )
      )
  6. DBデータガードサービス名をlistener.oraファイルに追加します。

    vi $ORACLE_HOME/network/admin/listener.ora
    # listener.ora Network Configuration File: /u01/app/oracle/product/19.0.0/NTAP/network/admin/listener.ora
    # Generated by Oracle configuration tools.
    
    LISTENER.NTAP =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = oras.internal.cloudapp.net)(PORT = 1521))
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        )
      )
    
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = NTAP)
        )
      )
    
    SID_LIST_LISTENER.NTAP =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = NTAP_LA_DGMGRL.internal.cloudapp.net)
          (ORACLE_HOME = /u01/app/oracle/product/19.0.0/NTAP)
          (SID_NAME = NTAP)
        )
      )
    
    LISTENER =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = oras.internal.cloudapp.net)(PORT = 1521))
      )
  7. dbcaを起動して、プライマリデータベースNTAPからスタンバイデータベースをインスタンス化します。

    dbca -silent -createDuplicateDB -gdbName NTAP -primaryDBConnectionString orap.internal.cloudapp.net:1521/NTAP_NY.internal.cloudapp.net -sid NTAP -initParams fal_server=NTAP_NY -createAsStandby -dbUniqueName NTAP_LA
    [oracle@oras admin]$ dbca -silent -createDuplicateDB -gdbName NTAP -primaryDBConnectionString orap.internal.cloudapp.net:1521/NTAP_NY.internal.cloudapp.net -sid NTAP -initParams fal_server=NTAP_NY -createAsStandby -dbUniqueName NTAP_LA
    Enter SYS user password:
    
    Prepare for db operation
    22% complete
    Listener config step
    44% complete
    Auxiliary instance creation
    67% complete
    RMAN duplicate
    89% complete
    Post duplicate database operations
    100% complete
    
    Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/NTAP_LA/NTAP_LA.log" for further details.
  8. 複製されたスタンバイデータベースを検証します。新しく複製されたスタンバイデータベースは、最初は読み取り専用モードで開きます。

    [oracle@oras admin]$ cat /etc/oratab
    #
    
    
    
    # This file is used by ORACLE utilities.  It is created by root.sh
    # and updated by either Database Configuration Assistant while creating
    # a database or ASM Configuration Assistant while creating ASM instance.
    
    # A colon, ':', is used as the field terminator.  A new line terminates
    # the entry.  Lines beginning with a pound sign, '#', are comments.
    #
    # Entries are of the form:
    #   $ORACLE_SID:$ORACLE_HOME:<N|Y>:
    #
    # The first and second fields are the system identifier and home
    # directory of the database respectively.  The third field indicates
    # to the dbstart utility that the database should , "Y", or should not,
    # "N", be brought up at system boot time.
    #
    # Multiple entries with the same $ORACLE_SID are not allowed.
    #
    #
    NTAP:/u01/app/oracle/product/19.0.0/NTAP:N
    [oracle@oras admin]$ export ORACLE_SID=NTAP
    [oracle@oras admin]$ sqlplus / as sysdba
    
    SQL*Plus: Release 19.0.0.0.0 - Production on Tue Nov 26 23:04:07 2024
    Version 19.18.0.0.0
    
    Copyright (c) 1982, 2022, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.18.0.0.0
    
    SQL> select name, open_mode from v$database;
    
    NAME      OPEN_MODE
    --------- --------------------
    NTAP      READ ONLY
    
    SQL> show parameter name
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    cdb_cluster_name                     string
    cell_offloadgroup_name               string
    db_file_name_convert                 string
    db_name                              string      NTAP
    db_unique_name                       string      NTAP_LA
    global_names                         boolean     FALSE
    instance_name                        string      NTAP
    lock_name_space                      string
    log_file_name_convert                string
    pdb_file_name_convert                string
    processor_group_name                 string
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    service_names                        string      NTAP_LA.internal.cloudapp.net
    SQL> show parameter log_archive_config
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    log_archive_config                   string      DG_CONFIG=(NTAP_NY,NTAP_LA)
    SQL> show parameter fal_server
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    fal_server                           string      NTAP_NY
    SQL> select name from v$datafile;
    
    NAME
    --------------------------------------------------------------------------------
    /u02/oradata/NTAP/system01.dbf
    /u02/oradata/NTAP/sysaux01.dbf
    /u02/oradata/NTAP/undotbs01.dbf
    /u02/oradata/NTAP/pdbseed/system01.dbf
    /u02/oradata/NTAP/pdbseed/sysaux01.dbf
    /u02/oradata/NTAP/users01.dbf
    /u02/oradata/NTAP/pdbseed/undotbs01.dbf
    /u02/oradata/NTAP/NTAP_pdb1/system01.dbf
    /u02/oradata/NTAP/NTAP_pdb1/sysaux01.dbf
    /u02/oradata/NTAP/NTAP_pdb1/undotbs01.dbf
    /u02/oradata/NTAP/NTAP_pdb1/users01.dbf
    
    NAME
    --------------------------------------------------------------------------------
    /u02/oradata/NTAP/NTAP_pdb2/system01.dbf
    /u02/oradata/NTAP/NTAP_pdb2/sysaux01.dbf
    /u02/oradata/NTAP/NTAP_pdb2/undotbs01.dbf
    /u02/oradata/NTAP/NTAP_pdb2/users01.dbf
    /u02/oradata/NTAP/NTAP_pdb3/system01.dbf
    /u02/oradata/NTAP/NTAP_pdb3/sysaux01.dbf
    /u02/oradata/NTAP/NTAP_pdb3/undotbs01.dbf
    /u02/oradata/NTAP/NTAP_pdb3/users01.dbf
    
    19 rows selected.
    
    SQL> select name from v$controlfile;
    
    NAME
    --------------------------------------------------------------------------------
    /u02/oradata/NTAP/control01.ctl
    /u03/orareco/NTAP_LA/control02.ctl
    
    SQL> col member form a80
    SQL> select group#, type, member from v$logfile order by 2, 1;
    
        GROUP# TYPE    MEMBER
    ---------- ------- --------------------------------------------------------------------------------
             1 ONLINE  /u03/orareco/NTAP_LA/onlinelog/o1_mf_1_mndl6mxh_.log
             2 ONLINE  /u03/orareco/NTAP_LA/onlinelog/o1_mf_2_mndl7jdb_.log
             3 ONLINE  /u03/orareco/NTAP_LA/onlinelog/o1_mf_3_mndl8f03_.log
             4 STANDBY /u03/orareco/NTAP_LA/onlinelog/o1_mf_4_mndl99m7_.log
             5 STANDBY /u03/orareco/NTAP_LA/onlinelog/o1_mf_5_mndlb67d_.log
             6 STANDBY /u03/orareco/NTAP_LA/onlinelog/o1_mf_6_mndlc2tw_.log
             7 STANDBY /u03/orareco/NTAP_LA/onlinelog/o1_mf_7_mndlczhb_.log
    
    7 rows selected.
  9. ステージでスタンバイデータベースを再起動し mount、次のコマンドを実行して、スタンバイデータベース管理リカバリをアクティブにします。

    alter database recover managed standby database disconnect from session;
    SQL> shutdown immediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup mount;
    ORACLE instance started.
    
    Total System Global Area 6442449688 bytes
    Fixed Size                  9177880 bytes
    Variable Size            1090519040 bytes
    Database Buffers         5335154688 bytes
    Redo Buffers                7598080 bytes
    Database mounted.
    SQL> alter database recover managed standby database disconnect from session;
    
    Database altered.
  10. スタンバイデータベースのリカバリステータスを検証します。ここで、 recovery logmerger インチ APPLYING_LOG アクション。

    SELECT ROLE, THREAD#, SEQUENCE#, ACTION FROM V$DATAGUARD_PROCESS;
SQL> SELECT ROLE, THREAD#, SEQUENCE#, ACTION FROM V$DATAGUARD_PROCESS;

ROLE                        THREAD#  SEQUENCE# ACTION
------------------------ ---------- ---------- ------------
post role transition              0          0 IDLE
recovery apply slave              0          0 IDLE
recovery apply slave              0          0 IDLE
recovery apply slave              0          0 IDLE
recovery apply slave              0          0 IDLE
recovery logmerger                1         18 APPLYING_LOG
managed recovery                  0          0 IDLE
RFS async                         1         18 IDLE
RFS ping                          1         18 IDLE
archive redo                      0          0 IDLE
redo transport timer              0          0 IDLE

ROLE                        THREAD#  SEQUENCE# ACTION
------------------------ ---------- ---------- ------------
gap manager                       0          0 IDLE
archive redo                      0          0 IDLE
archive redo                      0          0 IDLE
redo transport monitor            0          0 IDLE
log writer                        0          0 IDLE
archive local                     0          0 IDLE

17 rows selected.

SQL>

これで、マネージドスタンバイリカバリを有効にした状態での、プライマリからスタンバイへのNTAPのData Guard保護のセットアップは完了です。

Data Guardブローカーのセットアップ

Details

Oracle Data Guardブローカーは、Oracle Data Guard構成の作成、メンテナンス、監視を自動化して一元化する分散管理フレームワークです。次のセクションでは、Data Guard環境を管理するためのData Guardブローカーのセットアップ方法を示します。

  1. sqlplusを使用して次のコマンドを実行し、プライマリデータベースとスタンバイデータベースの両方でデータガードブローカーを起動します。

    alter system set dg_broker_start=true scope=both;
  2. プライマリデータベースから、SYSDBAとしてData Guard Borkerに接続します。

    [oracle@orap ~]$ dgmgrl sys@NTAP_NY
    DGMGRL for Linux: Release 19.0.0.0.0 - Production on Wed Dec 11 20:53:20 2024
    Version 19.18.0.0.0
    
    Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
    
    Welcome to DGMGRL, type "help" for information.
    Password:
    Connected to "NTAP_NY"
    Connected as SYSDBA.
    DGMGRL>
  3. Data Guardブローカー設定を作成して有効にします。

    DGMGRL> create configuration dg_config as primary database is NTAP_NY connect identifier is NTAP_NY;
    Configuration "dg_config" created with primary database "ntap_ny"
    DGMGRL> add database NTAP_LA as connect identifier is NTAP_LA;
    Database "ntap_la" added
    DGMGRL> enable configuration;
    Enabled.
    DGMGRL> show configuration;
    
    Configuration - dg_config
    
      Protection Mode: MaxPerformance
      Members:
      ntap_ny - Primary database
        ntap_la - Physical standby database
    
    Fast-Start Failover:  Disabled
    
    Configuration Status:
    SUCCESS   (status updated 3 seconds ago)
  4. Data Guard Broker管理フレームワーク内でデータベースのステータスを検証します。

    DGMGRL> show database db1_ny;
    
    Database - db1_ny
    
      Role:               PRIMARY
      Intended State:     TRANSPORT-ON
      Instance(s):
        db1
    
    Database Status:
    SUCCESS
    
    DGMGRL> show database db1_la;
    
    Database - db1_la
    
      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: 2.00 KByte/s
      Real Time Query:    OFF
      Instance(s):
        db1
    
    Database Status:
    SUCCESS
    
    DGMGRL>

障害が発生した場合、Data Guard Brokerを使用して、プライマリデータベースを瞬時にスタンバイデータベースにフェイルオーバーできます。が有効な場合、 `Fast-Start Failover`障害が検出されたときにユーザの介入なしにData Guard Brokerでプライマリデータベースをスタンバイにフェイルオーバーできます。

他のユースケースでのスタンバイデータベースのクローニング

Details

Oracle Data Guard環境でANFでOracleスタンバイデータベースをホストする主なメリットは、クローンを迅速に作成して他の多くのユースケースに対応できることです。シンクローンが有効になっていれば、最小限の追加ストレージ投資で対応できます。NetAppでは、SnapCenter UIツールを使用してOracle DataGuardデータベースを管理することを推奨しています。次のセクションでは、NetApp SnapCenterツールを使用して、マウント済みおよびリカバリ対象のスタンバイデータベースボリュームを開発、テスト、レポートなどの他の目的に使用するために、ANF上のSnapshotおよびクローニングを実行する方法を説明します。

以下に、SnapCenterを使用してOracle Data Guardの管理対象物理スタンバイデータベースから読み取り/書き込みデータベースをクローニングする手順の概要を示します。ANFでSnapCenter for Oracleをセットアップおよび設定する詳細な手順については、TR-4988を参照してください"SnapCenterを使用したANFでのOracleデータベースのバックアップ、リカバリ、クローン"

  1. usecaseの検証を開始するには、テストテーブルを作成し、プライマリデータベースのテストテーブルに行を挿入します。次に、トランザクションがスタンバイに移行し、最後にクローンが移行することを検証します。

    [oracle@orap ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 11 16:33:17 2024
    Version 19.18.0.0.0
    
    Copyright (c) 1982, 2022, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.18.0.0.0
    
    SQL> alter session set container=ntap_pdb1;
    
    Session altered.
    
    SQL> create table test(id integer, dt timestamp, event varchar(100));
    
    Table created.
    
    SQL> insert into test values(1, sysdate, 'a test transaction at primary database NTAP on DB server orap.internal.cloudapp.net');
    
    1 row created.
    
    SQL> commit;
    
    Commit complete.
    
    SQL> select * from test;
    
            ID
    ----------
    DT
    ---------------------------------------------------------------------------
    EVENT
    --------------------------------------------------------------------------------
             1
    11-DEC-24 04.38.44.000000 PM
    a test transaction at primary database NTAP on DB server orap.internal.cloudapp.
    net
    
    
    SQL> select instance_name, host_name from v$instance;
    
    INSTANCE_NAME
    ----------------
    HOST_NAME
    ----------------------------------------------------------------
    NTAP
    orap
    
    
    SQL>
  2. SnapCenter構成では、UNIXユーザ(demoの場合はazureuser)とAzureクレデンシャル(demoの場合はazure_anf)がのに Settings`追加されています `Credential

    GUIでのこの手順を示すスクリーンショット。

  3. azure_anfクレデンシャルを使用してANFストレージをに追加します Storage Systems。Azureサブスクリプションに複数のANFストレージアカウントがある場合は、ドロップダウンリストをクリックして適切なストレージアカウントを選択してください。このデモでは、Oracle専用ストレージアカウントを2つ作成しました。

    GUIでのこの手順を示すスクリーンショット。

  4. すべてのOracle DBサーバがSnapCenterに追加されている Hosts

    GUIでのこの手順を示すスクリーンショット。

    メモ クローンDBサーバには、偶発的なOracleソフトウェアスタックがインストールおよび設定されている必要があります。このテストケースでは、Oracle 19Cソフトウェアがインストールおよび設定されていますが、データベースは作成されていません。
  5. オフライン/フルデータベースバックアップのマウント用にカスタマイズしたバックアップポリシーを作成します。

    GUIでのこの手順を示すスクリーンショット。

  6. Tabキーでバックアップポリシーを適用してスタンバイデータベースを保護し `Resources`ます。最初に検出されたデータベースのステータスは、と表示され `Not protected`ます。

    GUIでのこの手順を示すスクリーンショット。

  7. バックアップは、手動で開始することも、バックアップポリシー適用後に設定した時間にスケジュールに従って実行することもできます。

    GUIでのこの手順を示すスクリーンショット。

  8. バックアップが完了したら、データベース名をクリックしてデータベースバックアップのページを開きます。データベースのクローニングに使用するバックアップを選択し、ボタンをクリックし `Clone`てクローニングワークフローを起動します。

    GUIでのこの手順を示すスクリーンショット。

  9. を選択し Complete Database Clone、クローンインスタンスにSIDという名前を付けます。

    GUIでのこの手順を示すスクリーンショット。

  10. クローンDBサーバを選択します。このサーバは、クローンデータベースをスタンバイDBからホストします。データファイル(REDOログ)はデフォルトのままにします。/u03マウントポイントに制御ファイルを配置します。

    GUIでのこの手順を示すスクリーンショット。

  11. OSベースの認証にはデータベースクレデンシャルは必要ありません。Oracleホーム設定を、クローンDBサーバで設定されている設定と照合します。

    GUIでのこの手順を示すスクリーンショット。

  12. 必要に応じてクローンデータベースのパラメータを変更します(クローンDBのPGAまたはSGAサイズの縮小など)。クローンの前に実行するスクリプトがある場合は指定します。

    GUIでのこの手順を示すスクリーンショット。

  13. クローンのあとに実行するsqlと入力します。デモでは、dev/test/reportデータベースのデータベースアーカイブモードをオフにするコマンドを実行しました。

    GUIでのこの手順を示すスクリーンショット。

  14. 必要に応じてEメール通知を設定します。

    GUIでのこの手順を示すスクリーンショット。

  15. 概要を確認し、 Finish をクリックしてクローンを開始します。

    GUIでのこの手順を示すスクリーンショット。

  16. タブでクローニングジョブを監視します Monitor。データベースのボリュームサイズでは、約950GBのデータベースをクローニングするのに約14分かかったことがわかりました。

    GUIでのこの手順を示すスクリーンショット。

  17. にすぐに登録されているSnapCenterからクローンデータベースを検証します。 Resources タブをクリックします。

    GUIでのこの手順を示すスクリーンショット。

  18. クローンDBサーバからクローンデータベースを照会します。プライマリデータベースで発生したテストトランザクションがクローンデータベースにトラバースされたことを確認しました。

    [oracle@orac ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 11 20:16:09 2024
    Version 19.18.0.0.0
    
    Copyright (c) 1982, 2022, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.18.0.0.0
    
    SQL> select name, open_mode, log_mode from v$database;
    
    NAME      OPEN_MODE            LOG_MODE
    --------- -------------------- ------------
    NTAPDEV   READ WRITE           NOARCHIVELOG
    
    SQL> select instance_name, host_name from v$instance;
    
    INSTANCE_NAME
    ----------------
    HOST_NAME
    ----------------------------------------------------------------
    NTAPDEV
    orac
    
    
    SQL> alter pluggable database all open;
    
    Pluggable database altered.
    
    SQL> alter pluggable database all save state;
    
    Pluggable database altered.
    
    
    SQL> alter session set container=ntap_pdb1;
    
    Session altered.
    
    SQL> select * from test;
    
            ID
    ----------
    DT
    ---------------------------------------------------------------------------
    EVENT
    --------------------------------------------------------------------------------
             1
    11-DEC-24 04.38.44.000000 PM
    a test transaction at primary database NTAP on DB server orap.internal.cloudapp.
    net

これで、開発、テスト、レポートなどのユースケース向けのOracle Data Guard on Azure ANFストレージでのOracleスタンバイデータベースクローンのデモは完了です。ANF上のOracle Data Guard内の同じスタンバイデータベースから、複数のOracleデータベースをクローニングできます。

追加情報の参照先

このドキュメントに記載されている情報の詳細については、以下のドキュメントや Web サイトを参照してください。