Skip to main content
NetApp Solutions
本繁體中文版使用機器翻譯,譯文僅供參考,若與英文版本牴觸,應以英文版本為準。

TR-4981 :使用 Amazon FSX ONTAP 降低 Oracle Active Data Guard 成本

貢獻者

NetApp公司的Alleno Cao、Niyazz Mohamed

本解決方案提供使用 AWS FSX ONTAP 做為備用站台的 Oracle 資料庫儲存設備來設定 Oracle Data Guard 的概述與詳細資料、以降低 AWS 中 Oracle Data Guard HA/DR 解決方案的授權與營運成本。

目的

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 資料庫作業的成本、並計畫在 AWS 中設定 Active Data Guard 、您應該考慮另一種方法。使用 Data Guard 取代 Active Data Guard 、將主要資料庫複寫到 Amazon FSX ONTAP 儲存設備上的單一實體待命資料庫。之後、可複製此待命資料庫的多個複本、並開啟以供讀寫存取、以處理許多其他使用案例、例如報告、開發、測試等 淨結果可有效提供 Active Data Guard 的功能、同時免除 Active Data Guard 授權、並為每個額外的備用資料庫增加額外的儲存成本。在本文件中、我們將示範如何在 AWS 中使用現有的主要資料庫來設定 Oracle Data Guard 、並將實體備用資料庫放置在 Amazon FSX ONTAP 儲存設備上。待機資料庫會透過快照進行備份、並視需要複製以進行讀取 / 寫入存取、以供使用案例使用。

本解決方案可解決下列使用案例:

  • 在 AWS 中任何儲存設備上的主要資料庫之間建立 Oracle Data Guard 、以在 Amazon FSX ONTAP 儲存設備上建立待命資料庫。

  • 在關閉的情況下複製待命資料庫、以供資料複寫使用、例如報告、開發、測試等

目標對象

本解決方案適用於下列人員:

  • 在 AWS 中設定 Oracle Active Data Guard 的 DBA 、可實現高可用度、資料保護和災難恢復。

  • 對 AWS 雲端中的 Oracle Active Data Guard 組態感興趣的資料庫解決方案架構設計師。

  • 管理支援 Oracle Data Guard 的 AWS FSX ONTAP 儲存設備的儲存管理員。

  • 喜歡在 AWS FSS/EC2 環境中站立 Oracle Data Guard 的應用程式擁有者。

解決方案測試與驗證環境

此解決方案的測試與驗證是在 AWS FSX ONTAP 和 EC2 實驗室環境中執行、可能與最終部署環境不符。如需詳細資訊、請參閱一節 部署考量的關鍵因素

架構

此映像提供使用 FSX ONTAP 在 AWS 中實作 Oracle Data Guard 的詳細圖片。

硬體與軟體元件

硬體

FSX ONTAP 支援儲存

AWS 提供的目前版本

同一個 VPC 和可用區域中的一個 FSX HA 叢集

EC2運算執行個體

T2.xlarge / 4vcpU/16G

三個 EC2 T2 大型 EC2 執行個體、一個做為主要 DB 伺服器、一個做為備用 DB 伺服器、第三個做為複製 DB 伺服器

軟體

RedHat Linux

RHEL-8.6.0_HVM-20220504-x86_64:2-Hourly2-GP2

已部署RedHat訂閱以進行測試

Oracle Grid 基礎架構

版本 19.18

已套用 RU 修補程式 p34762026_190000_Linux-x86-64.zip

Oracle資料庫

版本 19.18

已套用 RU 修補程式 p34765931_190000_Linux-x86-64.zip

Oracle OPatch

12.2.0.1.36 版

最新修補程式 p6880880_190000_Linux-x86-64.zip

Oracle Data Guard 組態、採用假設的紐約至洛杉磯 DR 設定

資料庫

* DB_UNIQUE 名稱 *

* Oracle Net Service Name*

主要

DB1_NY

db1_NY.demo.netapp.com

實體待命

DB1_LA

db1_LA.demo.netapp.com

部署考量的關鍵因素

  • * Oracle 備用資料庫 FlexClone 的運作方式。 * AWS FSX ONTAP FlexClone 提供可寫入的相同待命資料庫磁碟區的共用複本。這些磁碟區的複本實際上是連結回原始資料區塊的指標、直到新的寫入作業在複本上啟動為止。然後、 ONTAP 會為新的寫入作業配置新的儲存區塊。任何讀取的 IOS 都由原始資料區塊在作用中複寫下提供服務。因此、複本具有極高的儲存效率、可用於許多其他使用案例、並可為新的寫入 IOS 分配最少且遞增的新儲存設備。如此可大幅減少 Active Data Guard 儲存設備佔用空間、進而大幅節省儲存成本。NetApp 建議在資料庫從主要儲存設備切換至待命的 FSX 儲存設備時、將 FlexClone 活動降至最低、以維持 Oracle 高效能。

  • * Oracle 軟體需求。 * 一般而言、實體待命資料庫必須與主要資料庫具有相同的資料庫首頁版本、包括修補程式集例外( PSE )、重大修補程式更新( CPU )、 和 Patch Set Update ( PSU )、除非 Oracle Data Guard 備用先修補套用程序程序正在進行中(如 My Oracle Support 附註 1265700.1 中所述、網址為: "support.oracle.com"

  • * 備用資料庫目錄結構考量事項。 * 如果可能、主要和待命系統上的資料檔案、記錄檔和控制檔應具有相同的名稱和路徑名稱、並使用最佳彈性架構( OFA )命名慣例。待命資料庫上的歸檔目錄也應在站台之間相同、包括大小和結構。此策略可讓其他作業(例如備份、切換和容錯移轉)執行相同的步驟集、降低維護複雜度。

  • * 強制記錄模式。 * 若要防止無法傳播至待命資料庫的主要資料庫中未記錄的直接寫入,請在執行資料檔案備份以進行待命建立之前,先在主要資料庫中開啟強制記錄功能。

  • * 資料庫儲存管理。 * 為了簡化作業、 Oracle 建議您在 Oracle Data Guard 組態中設定 Oracle 自動儲存管理( Oracle ASM )和 Oracle 託管檔案( OMF )、以便在主要和待命資料庫上對稱地設定。

  • * EC2 運算執行個體。 * 在這些測試與驗證中、我們使用 AWS EC2 T2.xlge 執行個體做為 Oracle 資料庫運算執行個體。NetApp 建議在正式作業部署中使用 M5 類型 EC2 執行個體作為 Oracle 的運算執行個體、因為它已針對資料庫工作負載最佳化。您必須根據實際工作負載需求、適當調整 EC2 執行個體的 vCPU 數量和 RAM 數量。

  • * FSX儲存HA叢集單一或多區域部署。*在這些測試與驗證中、我們在單一AWS可用性區域中部署了FSXHA叢集。對於正式作業部署、NetApp建議在兩個不同的可用度區域中部署一組FSXHA配對。在 HA 配對中配置的 FSX 叢集、會同步鏡射在一對主動被動式檔案系統中、以提供儲存層級的備援。多區域部署可在單一 AWS 區域發生故障時、進一步提升高可用度。

  • * FSX 儲存叢集規模。 *Amazon FSX ONTAP 儲存檔案系統可提供多達 160,000 個原始 SSD IOPS 、高達 4Gbps 的處理量、以及最高 192TiB 容量。不過、您可以根據部署時的實際需求、根據已配置的 IOPS 、處理量和儲存限制(最低 1,024 GiB )來調整叢集大小。容量可即時動態調整、而不會影響應用程式可用度。

解決方案部署

假設您已在 VPC 的 AWS EC2 環境中部署主要 Oracle 資料庫、作為設定 Data Guard 的起點。主要資料庫是使用 Oracle ASM 進行儲存管理。 兩個 ASM 磁碟群組:為 Oracle 資料檔案、記錄檔及控制檔等建立 +data 和 +logs 如需在 AWS 中使用 ASM 部署 Oracle 的詳細資訊、請參閱下列技術報告以取得協助。

您的主要 Oracle 資料庫可以在 FSX ONTAP 上執行、或在 AWS EC2 生態系統內的任何其他儲存設備上執行。下節提供逐步部署程序、可在具備 ASM 儲存設備的主要 EC2 DB 執行個體之間、將 Oracle Data Guard 設定為具備 ASM 儲存設備的備用 EC2 DB 執行個體。

部署的先決條件

Details

部署需要下列先決條件。

  1. 已設定AWS帳戶、並已在AWS帳戶中建立必要的VPC和網路區段。

  2. 從 AWS EC2 主控台、您至少需要部署三個 EC2 Linux 執行個體、一個做為主要 Oracle DB 執行個體、一個做為備用 Oracle DB 執行個體、以及一個複製目標 DB 執行個體來進行報告、開發和測試等 如需環境設定的詳細資訊、請參閱上一節的架構圖表。另請檢閱 AWS "Linux執行個體使用指南" 以取得更多資訊。

  3. 從 AWS EC2 主控台、部署 Amazon FSX ONTAP 儲存 HA 叢集、以裝載儲存 Oracle 待命資料庫的 Oracle Volume 。如果您不熟悉 FSX 儲存設備的部署、請參閱文件"建立 FSX ONTAP 檔案系統"中的逐步說明。

  4. 您可以使用下列 Terraform 自動化工具組來執行步驟 2 和 3 、此工具組會建立名為的 EC2 執行個體 ora_01 以及名為的 FSX 檔案系統 fsx_01。請仔細檢閱指示內容、並在執行前變更變數以符合您的環境。您可以根據自己的部署需求輕鬆修改範本。

    git clone https://github.com/NetApp-Automation/na_aws_fsx_ec2_deploy.git
註 請確定您已在 EC2 執行個體根磁碟區中至少分配 50g 、以便有足夠的空間來存放 Oracle 安裝檔案。

準備 Data Guard 的主要資料庫

Details

在本示範中、我們已在主要 EC2 DB 執行個體上設定名為 db1 的主要 Oracle 資料庫、並在獨立式重新啟動組態中設定兩個 ASM 磁碟群組、其中包含 ASM 磁碟群組中的資料檔案、以及 ASM 磁碟群組 + 記錄中的資料和 Flash 恢復區域。以下說明設定 Data Guard 主要資料庫的詳細程序。所有步驟均應以資料庫擁有者 - Oracle 使用者的身分執行。

  1. 主要 EC2 DB 執行個體 IP-172-30-15-45 上的主要資料庫 db1 組態。ASM 磁碟群組可位於 EC2 生態系統內的任何類型儲存設備上。

    [oracle@ip-172-30-15-45 ~]$ 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.
    #
    #
    +ASM:/u01/app/oracle/product/19.0.0/grid:N
    db1:/u01/app/oracle/product/19.0.0/db1:N
    
    [oracle@ip-172-30-15-45 ~]$ /u01/app/oracle/product/19.0.0/grid/bin/crsctl stat res -t
    --------------------------------------------------------------------------------
    Name           Target  State        Server                   State details
    --------------------------------------------------------------------------------
    Local Resources
    --------------------------------------------------------------------------------
    ora.DATA.dg
                   ONLINE  ONLINE       ip-172-30-15-45          STABLE
    ora.LISTENER.lsnr
                   ONLINE  ONLINE       ip-172-30-15-45          STABLE
    ora.LOGS.dg
                   ONLINE  ONLINE       ip-172-30-15-45          STABLE
    ora.asm
                   ONLINE  ONLINE       ip-172-30-15-45          Started,STABLE
    ora.ons
                   OFFLINE OFFLINE      ip-172-30-15-45          STABLE
    --------------------------------------------------------------------------------
    Cluster Resources
    --------------------------------------------------------------------------------
    ora.cssd
          1        ONLINE  ONLINE       ip-172-30-15-45          STABLE
    ora.db1.db
          1        ONLINE  ONLINE       ip-172-30-15-45          Open,HOME=/u01/app/o
                                                                 racle/product/19.0.0
                                                                 /db1,STABLE
    ora.diskmon
          1        OFFLINE OFFLINE                               STABLE
    ora.driver.afd
          1        ONLINE  ONLINE       ip-172-30-15-45          STABLE
    ora.evmd
          1        ONLINE  ONLINE       ip-172-30-15-45          STABLE
    --------------------------------------------------------------------------------
  2. 在 sqlplus 中、啟用主要登入的強制登入功能。

    alter database force logging;
  3. 在 sqlplus 中、啟用主要上的回溯功能。回溯功能可讓您在容錯移轉後、輕鬆將主要資料庫恢復為待命狀態。

    alter database flashback on;
  4. 使用 Oracle 密碼檔案設定重做傳輸驗證:如果未設定、請使用 orapwd 公用程式在主要資料庫上建立 pwd 檔案、然後複製到備用資料庫 $oracle_home/DBS 目錄。

  5. 在主要資料庫上建立與目前線上記錄檔大小相同的待機重做記錄檔。記錄群組是一個以上的線上記錄檔群組。然後、主要資料庫可以快速轉換至待命角色、並在必要時開始接收重做資料。

    alter database add standby logfile thread 1 size 200M;
    Validate after standby logs addition:
    
    SQL> select group#, type, member from v$logfile;
    
        GROUP# TYPE    MEMBER
    ---------- ------- ------------------------------------------------------------
             3 ONLINE  +DATA/DB1/ONLINELOG/group_3.264.1145821513
             2 ONLINE  +DATA/DB1/ONLINELOG/group_2.263.1145821513
             1 ONLINE  +DATA/DB1/ONLINELOG/group_1.262.1145821513
             4 STANDBY +DATA/DB1/ONLINELOG/group_4.286.1146082751
             4 STANDBY +LOGS/DB1/ONLINELOG/group_4.258.1146082753
             5 STANDBY +DATA/DB1/ONLINELOG/group_5.287.1146082819
             5 STANDBY +LOGS/DB1/ONLINELOG/group_5.260.1146082821
             6 STANDBY +DATA/DB1/ONLINELOG/group_6.288.1146082825
             6 STANDBY +LOGS/DB1/ONLINELOG/group_6.261.1146082827
             7 STANDBY +DATA/DB1/ONLINELOG/group_7.289.1146082835
             7 STANDBY +LOGS/DB1/ONLINELOG/group_7.262.1146082835
    
    11 rows selected.
  6. 從 sqlplus 中、從 spfile 建立 pfile 以進行編輯。

    create pfile='/home/oracle/initdb1.ora' from spfile;
  7. 修改 pfile 並新增下列參數。

    DB_NAME=db1
    DB_UNIQUE_NAME=db1_NY
    LOG_ARCHIVE_CONFIG='DG_CONFIG=(db1_NY,db1_LA)'
    LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=db1_NY'
    LOG_ARCHIVE_DEST_2='SERVICE=db1_LA ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=db1_LA'
    REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
    FAL_SERVER=db1_LA
    STANDBY_FILE_MANAGEMENT=AUTO
  8. 從 sqlplus 中、從 /home/Oracle 目錄中的修訂版 pfile 、在 ASM +data 目錄中建立 spfile 。

    create spfile='+DATA' from pfile='/home/oracle/initdb1.ora';
  9. 在 +data 磁碟群組下找到新建立的 spfile (如有必要、請使用 asmcmd 公用程式)。使用 srvctl 修改網格、從新的 spfile 啟動資料庫、如下所示。

    [oracle@ip-172-30-15-45 db1]$ srvctl config database -d db1
    Database unique name: db1
    Database name: db1
    Oracle home: /u01/app/oracle/product/19.0.0/db1
    Oracle user: oracle
    Spfile: +DATA/DB1/PARAMETERFILE/spfile.270.1145822903
    Password file:
    Domain: demo.netapp.com
    Start options: open
    Stop options: immediate
    Database role: PRIMARY
    Management policy: AUTOMATIC
    Disk Groups: DATA
    Services:
    OSDBA group:
    OSOPER group:
    Database instance: db1
    [oracle@ip-172-30-15-45 db1]$ srvctl modify database -d db1 -spfile +DATA/DB1/PARAMETERFILE/spfiledb1.ora
    [oracle@ip-172-30-15-45 db1]$ srvctl config database -d db1
    Database unique name: db1
    Database name: db1
    Oracle home: /u01/app/oracle/product/19.0.0/db1
    Oracle user: oracle
    Spfile: +DATA/DB1/PARAMETERFILE/spfiledb1.ora
    Password file:
    Domain: demo.netapp.com
    Start options: open
    Stop options: immediate
    Database role: PRIMARY
    Management policy: AUTOMATIC
    Disk Groups: DATA
    Services:
    OSDBA group:
    OSOPER group:
    Database instance: db1
  10. 修改 tnsnames.ora 以新增 db_unique 名稱以進行名稱解析。

    # tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.0.0/db1/network/admin/tnsnames.ora
    # Generated by Oracle configuration tools.
    
    db1_NY =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = ip-172-30-15-45.ec2.internal)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SID = db1)
        )
      )
    
    db1_LA =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = ip-172-30-15-67.ec2.internal)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SID = db1)
        )
      )
    
    LISTENER_DB1 =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ip-172-30-15-45.ec2.internal)(PORT = 1521))
  11. 將主要資料庫的資料保護服務名稱 db1_NY_DGMGRL.demo.netapp 新增至 listener.ora 檔案。

#Backup file is  /u01/app/oracle/crsdata/ip-172-30-15-45/output/listener.ora.bak.ip-172-30-15-45.oracle line added by Agent
# listener.ora Network Configuration File: /u01/app/oracle/product/19.0.0/grid/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ip-172-30-15-45.ec2.internal)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = db1_NY_DGMGRL.demo.netapp.com)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/db1)
      (SID_NAME = db1)
    )
  )

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER=ON            # line added by Agent
  1. 使用 srvctl 關機並重新啟動資料庫、並驗證資料保護參數現在是否為作用中。

    srvctl stop database -d db1
    srvctl start database -d db1

如此即可完成 Data Guard 的主要資料庫設定。

準備備用資料庫並啟動 Data Guard

Details

Oracle Data Guard 需要作業系統核心組態和 Oracle 軟體堆疊、包括待機 EC2 DB 執行個體上的修補集、以符合主要 EC2 DB 執行個體。為了便於管理和簡化、備援的 EC2 DB 執行個體資料庫儲存組態理想上也應與主要的 EC2 DB 執行個體相符、例如 ASM 磁碟群組的名稱、數量和大小。以下是設定 Data Guard 的待機 EC2 DB 執行個體的詳細程序。所有命令均應以 Oracle 擁有者使用者 ID 執行。

  1. 首先、檢閱主要 EC2 執行個體上的主要資料庫組態。在本示範中、我們在主要 EC2 DB 執行個體上設定了一個名為 db1 的主要 Oracle 資料庫、其中有兩個 ASM 磁碟群組 + 資料和 + 登入獨立重新啟動組態。主要 ASM 磁碟群組可能位於 EC2 生態系統內的任何類型儲存設備上。

  2. 請遵循文件中的程序 "TR-4965 :使用 iSCSI/ASM 的 AWS FSS/EC2 中的 Oracle 資料庫部署與保護" 在待機 EC2 DB 執行個體上安裝及設定網格和 Oracle 、以符合主要資料庫。資料庫儲存設備應從與主要 EC2 DB 執行個體具有相同儲存容量的 FSX ONTAP 、配置並分配給待命 EC2 DB 執行個體。

    註 請在步驟 10 中停止 Oracle database installation 區段。備用資料庫將使用 dbca 資料庫複製功能從主要資料庫產生。
  3. 安裝並設定 Oracle 軟體後、從待命的 $Oracle_home DBS 目錄、從主要資料庫複製 Oracle 密碼。

    scp oracle@172.30.15.45:/u01/app/oracle/product/19.0.0/db1/dbs/orapwdb1 .
  4. 使用下列項目建立 tnsnames.ora 檔案。

    # tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.0.0/db1/network/admin/tnsnames.ora
    # Generated by Oracle configuration tools.
    
    db1_NY =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = ip-172-30-15-45.ec2.internal)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SID = db1)
        )
      )
    
    db1_LA =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = ip-172-30-15-67.ec2.internal)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SID = db1)
        )
      )
  5. 將 DB 資料保護服務名稱新增至 listener.ora 檔案。

    #Backup file is  /u01/app/oracle/crsdata/ip-172-30-15-67/output/listener.ora.bak.ip-172-30-15-67.oracle line added by Agent
    # listener.ora Network Configuration File: /u01/app/oracle/product/19.0.0/grid/network/admin/listener.ora
    # Generated by Oracle configuration tools.
    
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = ip-172-30-15-67.ec2.internal)(PORT = 1521))
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        )
      )
    
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = db1_LA_DGMGRL.demo.netapp.com)
          (ORACLE_HOME = /u01/app/oracle/product/19.0.0/db1)
          (SID_NAME = db1)
        )
      )
    
    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent
    VALID_NODE_CHECKING_REGISTRATION_LISTENER=ON            # line added by Agent
  6. 設定 Oracle 主目錄和路徑。

    export ORACLE_HOME=/u01/app/oracle/product/19.0.0/db1
    export PATH=$PATH:$ORACLE_HOME/bin
  7. 使用 dbca 從主資料庫 db1 產生待命資料庫。

    [oracle@ip-172-30-15-67 bin]$ dbca -silent -createDuplicateDB -gdbName db1 -primaryDBConnectionString ip-172-30-15-45.ec2.internal:1521/db1_NY.demo.netapp.com -sid db1 -initParams fal_server=db1_NY -createAsStandby -dbUniqueName db1_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/db1_LA/db1_LA.log" for further details.
  8. 驗證備份的備用資料庫。剛備份的備用資料庫一開始會以唯讀模式開啟。

    [oracle@ip-172-30-15-67 bin]$ export ORACLE_SID=db1
    [oracle@ip-172-30-15-67 bin]$ sqlplus / as sysdba
    
    SQL*Plus: Release 19.0.0.0.0 - Production on Wed Aug 30 18:25:46 2023
    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
    --------- --------------------
    DB1       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      db1
    db_unique_name                       string      db1_LA
    global_names                         boolean     FALSE
    instance_name                        string      db1
    lock_name_space                      string
    log_file_name_convert                string
    pdb_file_name_convert                string
    processor_group_name                 string
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    service_names                        string      db1_LA.demo.netapp.com
    SQL>
    SQL> show parameter log_archive_config
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    log_archive_config                   string      DG_CONFIG=(db1_NY,db1_LA)
    SQL> show parameter fal_server
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    fal_server                           string      db1_NY
    
    SQL> select name from v$datafile;
    
    NAME
    --------------------------------------------------------------------------------
    +DATA/DB1_LA/DATAFILE/system.261.1146248215
    +DATA/DB1_LA/DATAFILE/sysaux.262.1146248231
    +DATA/DB1_LA/DATAFILE/undotbs1.263.1146248247
    +DATA/DB1_LA/03C5C01A66EE9797E0632D0F1EAC5F59/DATAFILE/system.264.1146248253
    +DATA/DB1_LA/03C5C01A66EE9797E0632D0F1EAC5F59/DATAFILE/sysaux.265.1146248261
    +DATA/DB1_LA/DATAFILE/users.266.1146248267
    +DATA/DB1_LA/03C5C01A66EE9797E0632D0F1EAC5F59/DATAFILE/undotbs1.267.1146248269
    +DATA/DB1_LA/03C5EFD07C41A1FAE0632D0F1EAC9BD8/DATAFILE/system.268.1146248271
    +DATA/DB1_LA/03C5EFD07C41A1FAE0632D0F1EAC9BD8/DATAFILE/sysaux.269.1146248279
    +DATA/DB1_LA/03C5EFD07C41A1FAE0632D0F1EAC9BD8/DATAFILE/undotbs1.270.1146248285
    +DATA/DB1_LA/03C5EFD07C41A1FAE0632D0F1EAC9BD8/DATAFILE/users.271.1146248293
    
    NAME
    --------------------------------------------------------------------------------
    +DATA/DB1_LA/03C5F0DDF35CA2B6E0632D0F1EAC8B6B/DATAFILE/system.272.1146248295
    +DATA/DB1_LA/03C5F0DDF35CA2B6E0632D0F1EAC8B6B/DATAFILE/sysaux.273.1146248301
    +DATA/DB1_LA/03C5F0DDF35CA2B6E0632D0F1EAC8B6B/DATAFILE/undotbs1.274.1146248309
    +DATA/DB1_LA/03C5F0DDF35CA2B6E0632D0F1EAC8B6B/DATAFILE/users.275.1146248315
    +DATA/DB1_LA/03C5F1C9B142A2F1E0632D0F1EACF21A/DATAFILE/system.276.1146248317
    +DATA/DB1_LA/03C5F1C9B142A2F1E0632D0F1EACF21A/DATAFILE/sysaux.277.1146248323
    +DATA/DB1_LA/03C5F1C9B142A2F1E0632D0F1EACF21A/DATAFILE/undotbs1.278.1146248331
    +DATA/DB1_LA/03C5F1C9B142A2F1E0632D0F1EACF21A/DATAFILE/users.279.1146248337
    
    19 rows selected.
    
    SQL> select name from v$controlfile;
    
    NAME
    --------------------------------------------------------------------------------
    +DATA/DB1_LA/CONTROLFILE/current.260.1146248209
    +LOGS/DB1_LA/CONTROLFILE/current.257.1146248209
    
    SQL> select name from v$tempfile;
    
    NAME
    --------------------------------------------------------------------------------
    +DATA/DB1_LA/TEMPFILE/temp.287.1146248371
    +DATA/DB1_LA/03C5C01A66EE9797E0632D0F1EAC5F59/TEMPFILE/temp.288.1146248375
    +DATA/DB1_LA/03C5EFD07C41A1FAE0632D0F1EAC9BD8/TEMPFILE/temp.290.1146248463
    +DATA/DB1_LA/03C5F0DDF35CA2B6E0632D0F1EAC8B6B/TEMPFILE/temp.291.1146248463
    +DATA/DB1_LA/03C5F1C9B142A2F1E0632D0F1EACF21A/TEMPFILE/temp.292.1146248463
    
    SQL> select group#, type, member from v$logfile order by 2, 1;
    
        GROUP# TYPE    MEMBER
    ---------- ------- ------------------------------------------------------------
             1 ONLINE  +LOGS/DB1_LA/ONLINELOG/group_1.259.1146248349
             1 ONLINE  +DATA/DB1_LA/ONLINELOG/group_1.280.1146248347
             2 ONLINE  +DATA/DB1_LA/ONLINELOG/group_2.281.1146248351
             2 ONLINE  +LOGS/DB1_LA/ONLINELOG/group_2.258.1146248353
             3 ONLINE  +DATA/DB1_LA/ONLINELOG/group_3.282.1146248355
             3 ONLINE  +LOGS/DB1_LA/ONLINELOG/group_3.260.1146248355
             4 STANDBY +DATA/DB1_LA/ONLINELOG/group_4.283.1146248357
             4 STANDBY +LOGS/DB1_LA/ONLINELOG/group_4.261.1146248359
             5 STANDBY +DATA/DB1_LA/ONLINELOG/group_5.284.1146248361
             5 STANDBY +LOGS/DB1_LA/ONLINELOG/group_5.262.1146248363
             6 STANDBY +LOGS/DB1_LA/ONLINELOG/group_6.263.1146248365
             6 STANDBY +DATA/DB1_LA/ONLINELOG/group_6.285.1146248365
             7 STANDBY +LOGS/DB1_LA/ONLINELOG/group_7.264.1146248369
             7 STANDBY +DATA/DB1_LA/ONLINELOG/group_7.286.1146248367
    
    14 rows selected.
    
    SQL> select name, open_mode from v$database;
    
    NAME      OPEN_MODE
    --------- --------------------
    DB1       READ ONLY
  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 8053062944 bytes
    Fixed Size                  9182496 bytes
    Variable Size            1291845632 bytes
    Database Buffers         6744440832 bytes
    Redo Buffers                7593984 bytes
    Database mounted.
    SQL> alter database recover managed standby database disconnect from session;
    
    Database altered.
  10. 驗證待命資料庫的恢復狀態。請注意 recovery logmerger 在中 APPLYING_LOG 行動。

    SQL> SELECT ROLE, THREAD#, SEQUENCE#, ACTION FROM V$DATAGUARD_PROCESS;
    
    ROLE                        THREAD#  SEQUENCE# ACTION
    ------------------------ ---------- ---------- ------------
    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         30 APPLYING_LOG
    RFS ping                          1         30 IDLE
    RFS async                         1         30 IDLE
    archive redo                      0          0 IDLE
    archive redo                      0          0 IDLE
    archive redo                      0          0 IDLE
    gap manager                       0          0 IDLE
    
    ROLE                        THREAD#  SEQUENCE# ACTION
    ------------------------ ---------- ---------- ------------
    managed recovery                  0          0 IDLE
    redo transport monitor            0          0 IDLE
    log writer                        0          0 IDLE
    archive local                     0          0 IDLE
    redo transport timer              0          0 IDLE
    
    16 rows selected.
    
    SQL>

如此一來、在啟用託管式待命恢復的情況下、即可完成 DB1 從主要到待命的 Data Guard 保護設定。

設定 Data Guard Broker

Details

Oracle Data Guard Broker 是一套分散式管理架構、可自動化及集中建立、維護及監控 Oracle Data Guard 組態。以下章節示範如何設定 Data Guard Broker 來管理 Data Guard 環境。

  1. 透過 sqlplus 執行下列命令、即可在主要和待命資料庫上啟動資料保護代理程式。

    alter system set dg_broker_start=true scope=both;
  2. 從主要資料庫連線至 Data Guard Borker 、做為 SYSDBA 。

    [oracle@ip-172-30-15-45 db1]$ dgmgrl sys@db1_NY
    DGMGRL for Linux: Release 19.0.0.0.0 - Production on Wed Aug 30 19:34:14 2023
    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 "db1_NY"
    Connected as SYSDBA.
  3. 建立並啟用 Data Guard Broker 組態。

    DGMGRL> create configuration dg_config as primary database is db1_NY connect identifier is db1_NY;
    Configuration "dg_config" created with primary database "db1_ny"
    DGMGRL> add database db1_LA as connect identifier is db1_LA;
    Database "db1_la" added
    DGMGRL> enable configuration;
    Enabled.
    DGMGRL> show configuration;
    
    Configuration - dg_config
    
      Protection Mode: MaxPerformance
      Members:
      db1_ny - Primary database
        db1_la - Physical standby database
    
    Fast-Start Failover:  Disabled
    
    Configuration Status:
    SUCCESS   (status updated 28 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 可用於立即將主要資料庫容錯移轉至待命。

針對其他使用案例複製待命資料庫

Details

在 Data Guard 中、在 AWS FSX ONTAP 上暫存備用資料庫的主要優點是可以透過 FlexClould 來處理許多其他使用案例、而且只需最少的額外儲存投資。在下一節中、我們將示範如何在 FSX ONTAP 上快照及複製掛載及還原中的備用資料庫磁碟區、以用於其他用途、例如開發、測試、報告等。 使用 NetApp SnapCenter 工具。

以下是使用 SnapCenter 從 Data Guard 中的託管實體待命資料庫複製讀寫資料庫的高階程序。如需如何設定和設定 SnapCenter 的詳細說明、請參閱 "混合雲資料庫解決方案SnapCenter 搭配" Oracle 相關章節。

  1. 我們先建立測試表格、然後在主要資料庫的測試表格中插入一列。接著我們會驗證交易是否經過待機、最後是複製作業。

    [oracle@ip-172-30-15-45 db1]$ sqlplus / as sysdba
    
    SQL*Plus: Release 19.0.0.0.0 - Production on Thu Aug 31 16:35:53 2023
    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=db1_pdb1;
    
    Session altered.
    
    SQL> create table test(
      2  id integer,
      3  dt timestamp,
      4  event varchar(100));
    
    Table created.
    
    SQL> insert into test values(1, sysdate, 'a test transaction on primary database db1 and ec2 db host: ip-172-30-15-45.ec2.internal');
    
    1 row created.
    
    SQL> commit;
    
    Commit complete.
    
    SQL> select * from test;
    
            ID
    ----------
    DT
    ---------------------------------------------------------------------------
    EVENT
    --------------------------------------------------------------------------------
             1
    31-AUG-23 04.49.29.000000 PM
    a test transaction on primary database db1 and ec2 db host: ip-172-30-15-45.ec2.
    internal
    
    SQL> select instance_name, host_name from v$instance;
    
    INSTANCE_NAME
    ----------------
    HOST_NAME
    ----------------------------------------------------------------
    db1
    ip-172-30-15-45.ec2.internal
  2. 將 FSX 儲存叢集新增至 Storage Systems SnapCenter 搭配 FSX 叢集管理 IP 和 fsxadmin 認證。

    GUI 中顯示此步驟的螢幕擷取畫面。

  3. 將 AWS EC2 使用者新增至 Credential 在中 Settings

    GUI 中顯示此步驟的螢幕擷取畫面。

  4. 新增待機 EC2 DB 執行個體、並將 EC2 DB 執行個體複製到 Hosts

    GUI 中顯示此步驟的螢幕擷取畫面。

    註 Clone EC2 DB 執行個體應安裝並設定類似的 Oracle 軟體堆疊。在我們的測試案例中、已安裝並設定網格基礎架構和 Oracle 19C 、但未建立任何資料庫。
  5. 建立專為離線 / 掛載完整資料庫備份量身打造的備份原則。

    GUI 中顯示此步驟的螢幕擷取畫面。

  6. 套用備份原則以保護中的待命資料庫 Resources 索引標籤。

    GUI 中顯示此步驟的螢幕擷取畫面。

  7. 按一下資料庫名稱以開啟資料庫備份頁面。選取要用於資料庫複製的備份、然後按一下 Clone 啟動複製工作流程的按鈕。

    GUI 中顯示此步驟的螢幕擷取畫面。

  8. 選取 Complete Database Clone 並命名複製執行個體的 SID 。

    GUI 中顯示此步驟的螢幕擷取畫面。

  9. 選取複製主機、將複製的資料庫從待命資料庫主控。接受資料檔案、控制檔和重做記錄檔的預設值。將在複製主機上建立兩個 ASM 磁碟群組、這些群組對應於待命資料庫上的磁碟群組。

    GUI 中顯示此步驟的螢幕擷取畫面。

  10. 作業系統型驗證不需要資料庫認證。將 Oracle 主目錄設定與複製 EC2 資料庫執行個體上所設定的項目配對。

    GUI 中顯示此步驟的螢幕擷取畫面。

  11. 視需要變更複製資料庫參數、並指定要在 cloen (如果有)之前執行的指令碼。

    GUI 中顯示此步驟的螢幕擷取畫面。

  12. 輸入 SQL 以在複製後執行。在示範中、我們執行命令來關閉開發 / 測試 / 報告資料庫的資料庫歸檔模式。

    GUI 中顯示此步驟的螢幕擷取畫面。

  13. 視需要設定電子郵件通知。

    GUI 中顯示此步驟的螢幕擷取畫面。

  14. 檢閱摘要、按一下 Finish 以開始複製。

    GUI 中顯示此步驟的螢幕擷取畫面。

  15. 監控中的複製工作 Monitor 索引標籤。我們觀察到、複製資料庫約 300 GB 的資料庫磁碟區大小約需 8 分鐘。

    GUI 中顯示此步驟的螢幕擷取畫面。

  16. 從 SnapCenter 驗證複製資料庫、此資料庫會立即在中登錄 Resources 在複製作業後立即按下 Tab 鍵。

    GUI 中顯示此步驟的螢幕擷取畫面。

  17. 從複製 EC2 執行個體查詢複製資料庫。我們已驗證在主要資料庫中發生的測試交易已遍歷至複製資料庫。

    [oracle@ip-172-30-15-126 ~]$ export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dev
    [oracle@ip-172-30-15-126 ~]$ export ORACLE_SID=db1dev
    [oracle@ip-172-30-15-126 ~]$ export PATH=$PATH:$ORACLE_HOME/bin
    [oracle@ip-172-30-15-126 ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 19.0.0.0.0 - Production on Wed Sep 6 16:41:41 2023
    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
    --------- -------------------- ------------
    DB1DEV    READ WRITE           NOARCHIVELOG
    
    SQL> select instance_name, host_name from v$instance;
    
    INSTANCE_NAME
    ----------------
    HOST_NAME
    ----------------------------------------------------------------
    db1dev
    ip-172-30-15-126.ec2.internal
    
    SQL> alter session set container=db1_pdb1;
    
    Session altered.
    
    SQL> select * from test;
    
            ID
    ----------
    DT
    ---------------------------------------------------------------------------
    EVENT
    --------------------------------------------------------------------------------
             1
    31-AUG-23 04.49.29.000000 PM
    a test transaction on primary database db1 and ec2 db host: ip-172-30-15-45.ec2.
    internal
    
    
    SQL>

這將完成從 FSX 儲存設備上 Data Guard 的待命資料庫複製和驗證新 Oracle 資料庫、以供開發、測試、報告或任何其他使用案例使用。您可以在 Data Guard 中、將多個 Oracle 資料庫複製到同一個待命資料庫。