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

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

貢獻者 kevin-hoke

Allen Cao、Niyaz Mohamed, NetApp

此解決方案提供了使用 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 Option,因此需要單獨的授權。在 Active Data Guard 設定中,多個備用資料庫可以從主資料庫接收資料複製。但是,每個額外的備用資料庫都需要 Active Data Guard 許可證和與主資料庫大小相同的額外儲存空間。營運成本迅速增加。

如果您熱衷於削減 Oracle 資料庫操作成本並計劃在 AWS 中設定 Active Data Guard,那麼您應該考慮另一種選擇。不要使用 Active Data Guard,而是使用 Data Guard 從主資料庫複製到Amazon FSx ONTAP儲存上的單一實體備用資料庫。隨後,可以複製此備用資料庫的多個副本並打開以進行讀取/寫入訪問,以服務許多其他用例,例如報告、開發、測試等。最終結果有效地提供了 Active Data Guard 的功能,同時消除了 Active Data Guard 授權和每個額外備用資料庫的額外儲存成本。在本文檔中,我們示範如何使用 AWS 中現有的主資料庫設定 Oracle Data Guard,並將實體備用資料庫放置在Amazon FSx ONTAP儲存上。備用資料庫透過快照進行備份,並根據需要複製以供用例進行讀取/寫入存取。

此解決方案適用於以下用例:

  • AWS 中任何儲存上的主資料庫與Amazon FSx ONTAP儲存上的備用資料庫之間的 Oracle Data Guard。

  • 在關閉資料複製的同時複製備用資料庫,以滿足報告、開發、測試等用例的需求。

對象

此解決方案適用於以下人群:

  • 一位 DBA 在 AWS 中設定了 Oracle Active Data Guard,以實現高可用性、資料保護和災難復原。

  • 對 AWS 雲端中的 Oracle Active Data Guard 配置有興趣的資料庫解決方案架構師。

  • 管理支援 Oracle Data Guard 的 AWS FSx ONTAP儲存的儲存管理員。

  • 喜歡在 AWS FSx/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 xlarge EC2 實例,一個作為主資料庫伺服器,一個作為備用資料庫伺服器,第三個作為克隆資料庫伺服器

軟體

紅帽Linux

RHEL-8.6.0_HVM-20220503-x86_64-2-Hourly2-GP2

部署 RedHat 訂閱進行測試

Oracle 網格基礎架構

版本 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 配置

資料庫

資料庫唯一名稱

Oracle 網路服務名稱

基本的

db1_NY

db1_NY.demo.netapp.com

物理備用

db1_LA

db1_LA.demo.netapp.com

部署考慮的關鍵因素

  • *Oracle 備用資料庫FlexClone 的工作原理。 * AWS FSx ONTAP FlexClone提供可寫入的相同備用資料庫磁碟區的共用副本。卷的副本實際上是連結回原始資料塊的指針,直到在克隆上啟動新的寫入。然後, ONTAP為新的寫入指派新的儲存區塊。任何讀取 IO 均由主動複製下的原始資料區塊提供服務。因此,克隆的儲存效率非常高,可以用於許多其他用例,為新的寫入 IO 分配最少且增量的新儲存。透過大幅減少 Active Data Guard 儲存空間,可以節省大量的儲存成本。 NetApp建議在資料庫從主儲存切換到備用 FSx 儲存時盡量減少FlexClone活動,以保持 Oracle 效能處於高水準。

  • *Oracle 軟體需求。 *一般而言,實體備用資料庫必須具有與主資料庫相同的資料庫主版本,包括補丁集異常 (PSE)、關鍵修補程式更新 (CPU) 和修補程式集更新 (PSU),除非正在進行 Oracle Data Guard 備用優先補丁應用程式(如 My Oracle Support 說明 1265700.1 所述,網址為"support.oracle.com"

  • *備用資料庫目錄結構注意事項。 *如果可能,主系統和備用系統上的資料檔案、日誌檔案和控制檔案應該具有相同的名稱和路徑名,並使用最佳靈活架構 (OFA) 命名約定。備用資料庫上的存檔目錄在網站之間也應該相同,包括大小和結構。此策略允許其他操作(例如備份、切換和故障轉移)執行同一組步驟,從而降低維護複雜性。

  • *強制記錄模式。 *為了防止主資料庫中未記錄的直接寫入無法傳播到備用資料庫,請在執行資料檔案備份以建立備用資料庫之前在主資料庫上開啟 FORCE LOGGING。

  • 資料庫儲存管理。為了簡化操作,Oracle 建議在 Oracle Data Guard 配置中設定 Oracle 自動儲存管理 (Oracle ASM) 和 Oracle 管理檔案 (OMF) 時在主資料庫和備用資料庫上對稱設定它。

  • EC2 運算執行個體。在這些測試和驗證中,我們使用 AWS EC2 t2.xlarge 執行個體作為 Oracle 資料庫運算執行個體。 NetApp建議在生產部署中使用 M5 類型的 EC2 執行個體作為 Oracle 的運算實例,因為它針對資料庫工作負載進行了最佳化。您需要根據實際工作負載需求,適當調整 EC2 執行個體的 vCPU 數量和 RAM 容量。

  • *FSx 儲存 HA 叢集單區域或多區域部署。 *在這些測試和驗證中,我們在單一 AWS 可用區中部署了一個 FSx HA 叢集。對於生產部署, NetApp建議在兩個不同的可用區部署 FSx HA 對。 FSx 叢集始終在 HA 對中配置,該 HA 對在主動-被動檔案系統中同步鏡像,以提供儲存級冗餘。多區域部署進一步增強了單一 AWS 區域發生故障時的高可用性。

  • FSx 儲存叢集大小。 Amazon FSx ONTAP儲存檔案系統提供高達 160,000 個原始 SSD IOPS、高達 4GBps 的吞吐量以及最大 192TiB 的容量。但是,您可以根據部署時的實際需求,根據預先配置的 IOPS、吞吐量和儲存限制(最小 1,024 GiB)來確定叢集大小。容量可以動態調整,而不會影響應用程式的可用性。

解決方案部署

假設您已經在 VPC 內的 AWS EC2 環境中部署了主 Oracle 資料庫,作為設定 Data Guard 的起點。主資料庫使用 Oracle ASM 進行儲存管理部署。建立兩個 ASM 磁碟組 - +DATA 和 +LOGS,用於儲存 Oracle 資料檔案、日誌檔案、控制檔案等。有關在 AWS 中使用 ASM 部署 Oracle 的詳細信息,請參閱以下技術報告以取得協助。

您的主要 Oracle 資料庫可以在 FSx ONTAP或 AWS EC2 生態系統中的任何其他儲存體上運作。以下部分提供了在具有 ASM 儲存的主 EC2 DB 執行個體和具有 ASM 儲存的備用 EC2 DB 執行個體之間設定 Oracle Data Guard 的分步部署程序。

部署先決條件

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 磁碟區。如果您不熟悉 FSx 儲存的部署,請參閱文檔"建立 FSx ONTAP檔案系統"以獲得逐步說明。

  4. 步驟 2 和 3 可以使用以下 Terraform 自動化工具包執行,該工具包會建立一個名為 ora_01`以及一個名為 `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 磁碟組 +DATA 中,閃回復原區位於 ASM 磁碟組 +LOGS 中。下面說明了為 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_name 進行名稱解析。

    # 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 需要 OS 核心配置和 Oracle 軟體堆疊(包括備用 EC2 DB 執行個體上的修補程式集)才能與主 EC2 DB 執行個體相符。為了方便管理和簡單起見,備用 EC2 DB 執行個體資料庫儲存配置理想情況下也應該與主 EC2 DB 執行個體匹配,例如 ASM 磁碟組的名稱、數量和大小。以下是為 Data Guard 設定備用 EC2 DB 執行個體的詳細步驟。所有命令都應以 oracle 所有者使用者 ID 的身份執行。

  1. 首先,檢查主 EC2 執行個體上主資料庫的配置。在此示範中,我們在主 EC2 DB 執行個體上設定了一個名為 db1 的主 Oracle 資料庫,並在獨立重新啟動配置中使用兩個 ASM 磁碟組 +DATA 和 +LOGS。主 ASM 磁碟組可以位於 EC2 生態系統內的任何類型的儲存空間上。

  2. 按照文件中的程序進行"TR-4965:使用 iSCSI/ASM 在 AWS FSx/EC2 中部署和保護 Oracle 資料庫"在備用 EC2 DB 執行個體上安裝和設定網格和 Oracle,以與主資料庫相符。應配置資料庫儲存並將其指派給 FSx ONTAP中的備用 EC2 DB 實例,其儲存容量與主 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 代理程式是一個分散式管理框架,可自動並集中執行 Oracle Data Guard 配置的建立、維護和監控。以下部分示範如何設定 Data Guard Broker 來管理 Data Guard 環境。

  1. 透過 sqlplus 使用以下命令在主資料庫和備用資料庫上啟動資料保護代理程式。

    alter system set dg_broker_start=true scope=both;
  2. 從主資料庫,以 SYSDBA 身分連接到 Data Guard Borker。

    [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上暫存備用資料庫的主要好處是,它可以透過 FlexCloned 來服務許多其他用例,而只需最少的額外儲存投資。在下一部分中,我們將示範如何使用NetApp SnapCenter工具對 FSx ONTAP上已安裝和還原的備用資料庫磁碟區進行快照和克隆,以用於其他目的,例如 DEV、TEST、REPORT 等。

以下是使用SnapCenter從 Data Guard 中的託管實體備用資料庫複製 READ/WRITE 資料庫的進階流程。有關如何設定和配置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-user 新增至 Credential`在 `Settings

    螢幕截圖顯示了 GUI 中的此步驟。

  4. 新增備用 EC2 DB 執行個體並將 EC2 DB 執行個體複製到 Hosts

    螢幕截圖顯示了 GUI 中的此步驟。

    註 克隆的 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. 如果需要,請更改克隆資料庫參數,並指定在克隆之前運行的腳本(如果有)。

    螢幕截圖顯示了 GUI 中的此步驟。

  12. 輸入克隆後運行的SQL。在示範中,我們執行指令來關閉 dev/test/report 資料庫的資料庫存檔模式。

    螢幕截圖顯示了 GUI 中的此步驟。

  13. 如果需要,請配置電子郵件通知。

    螢幕截圖顯示了 GUI 中的此步驟。

  14. 查看摘要,點擊 `Finish`開始克隆。

    螢幕截圖顯示了 GUI 中的此步驟。

  15. 監視複製作業 `Monitor`選項卡。我們觀察到克隆一個資料庫磁碟區大小約 300GB 的資料庫大約需要 8 分鐘。

    螢幕截圖顯示了 GUI 中的此步驟。

  16. 從SnapCenter驗證克隆資料庫,該資料庫會立即在 `Resources`克隆操作後立即標籤。

    螢幕截圖顯示了 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 資料庫,用於 DEV、TEST、REPORT 或任何其他用例。可以從 Data Guard 中的同一個備用資料庫克隆多個 Oracle 資料庫。