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 提供的目前版本 |
同一個 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
部署需要下列先決條件。
-
已設定AWS帳戶、並已在AWS帳戶中建立必要的VPC和網路區段。
-
從 AWS EC2 主控台、您至少需要部署三個 EC2 Linux 執行個體、一個做為主要 Oracle DB 執行個體、一個做為備用 Oracle DB 執行個體、以及一個複製目標 DB 執行個體來進行報告、開發和測試等 如需環境設定的詳細資訊、請參閱上一節的架構圖表。另請檢閱 AWS "Linux執行個體使用指南" 以取得更多資訊。
-
從 AWS EC2 主控台、部署 Amazon FSX ONTAP 儲存 HA 叢集、以裝載儲存 Oracle 待命資料庫的 Oracle Volume 。如果您不熟悉 FSX 儲存設備的部署、請參閱文件"建立 FSX ONTAP 檔案系統"中的逐步說明。
-
您可以使用下列 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 使用者的身分執行。
-
主要 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 --------------------------------------------------------------------------------
-
在 sqlplus 中、啟用主要登入的強制登入功能。
alter database force logging;
-
在 sqlplus 中、啟用主要上的回溯功能。回溯功能可讓您在容錯移轉後、輕鬆將主要資料庫恢復為待命狀態。
alter database flashback on;
-
使用 Oracle 密碼檔案設定重做傳輸驗證:如果未設定、請使用 orapwd 公用程式在主要資料庫上建立 pwd 檔案、然後複製到備用資料庫 $oracle_home/DBS 目錄。
-
在主要資料庫上建立與目前線上記錄檔大小相同的待機重做記錄檔。記錄群組是一個以上的線上記錄檔群組。然後、主要資料庫可以快速轉換至待命角色、並在必要時開始接收重做資料。
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.
-
從 sqlplus 中、從 spfile 建立 pfile 以進行編輯。
create pfile='/home/oracle/initdb1.ora' from spfile;
-
修改 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
-
從 sqlplus 中、從 /home/Oracle 目錄中的修訂版 pfile 、在 ASM +data 目錄中建立 spfile 。
create spfile='+DATA' from pfile='/home/oracle/initdb1.ora';
-
在 +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
-
修改 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))
-
將主要資料庫的資料保護服務名稱 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
-
使用 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 執行。
-
首先、檢閱主要 EC2 執行個體上的主要資料庫組態。在本示範中、我們在主要 EC2 DB 執行個體上設定了一個名為 db1 的主要 Oracle 資料庫、其中有兩個 ASM 磁碟群組 + 資料和 + 登入獨立重新啟動組態。主要 ASM 磁碟群組可能位於 EC2 生態系統內的任何類型儲存設備上。
-
請遵循文件中的程序 "TR-4965 :使用 iSCSI/ASM 的 AWS FSS/EC2 中的 Oracle 資料庫部署與保護" 在待機 EC2 DB 執行個體上安裝及設定網格和 Oracle 、以符合主要資料庫。資料庫儲存設備應從與主要 EC2 DB 執行個體具有相同儲存容量的 FSX ONTAP 、配置並分配給待命 EC2 DB 執行個體。
請在步驟 10 中停止 Oracle database installation
區段。備用資料庫將使用 dbca 資料庫複製功能從主要資料庫產生。 -
安裝並設定 Oracle 軟體後、從待命的 $Oracle_home DBS 目錄、從主要資料庫複製 Oracle 密碼。
scp oracle@172.30.15.45:/u01/app/oracle/product/19.0.0/db1/dbs/orapwdb1 .
-
使用下列項目建立 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) ) )
-
將 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
-
設定 Oracle 主目錄和路徑。
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/db1
export PATH=$PATH:$ORACLE_HOME/bin
-
使用 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.
-
驗證備份的備用資料庫。剛備份的備用資料庫一開始會以唯讀模式開啟。
[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
-
在中重新啟動待命資料庫
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.
-
驗證待命資料庫的恢復狀態。請注意
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 環境。
-
透過 sqlplus 執行下列命令、即可在主要和待命資料庫上啟動資料保護代理程式。
alter system set dg_broker_start=true scope=both;
-
從主要資料庫連線至 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.
-
建立並啟用 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)
-
驗證 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 相關章節。
-
我們先建立測試表格、然後在主要資料庫的測試表格中插入一列。接著我們會驗證交易是否經過待機、最後是複製作業。
[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
-
將 FSX 儲存叢集新增至
Storage Systems
SnapCenter 搭配 FSX 叢集管理 IP 和 fsxadmin 認證。 -
將 AWS EC2 使用者新增至
Credential
在中Settings
。 -
新增待機 EC2 DB 執行個體、並將 EC2 DB 執行個體複製到
Hosts
。Clone EC2 DB 執行個體應安裝並設定類似的 Oracle 軟體堆疊。在我們的測試案例中、已安裝並設定網格基礎架構和 Oracle 19C 、但未建立任何資料庫。 -
建立專為離線 / 掛載完整資料庫備份量身打造的備份原則。
-
套用備份原則以保護中的待命資料庫
Resources
索引標籤。 -
按一下資料庫名稱以開啟資料庫備份頁面。選取要用於資料庫複製的備份、然後按一下
Clone
啟動複製工作流程的按鈕。 -
選取
Complete Database Clone
並命名複製執行個體的 SID 。 -
選取複製主機、將複製的資料庫從待命資料庫主控。接受資料檔案、控制檔和重做記錄檔的預設值。將在複製主機上建立兩個 ASM 磁碟群組、這些群組對應於待命資料庫上的磁碟群組。
-
作業系統型驗證不需要資料庫認證。將 Oracle 主目錄設定與複製 EC2 資料庫執行個體上所設定的項目配對。
-
視需要變更複製資料庫參數、並指定要在 cloen (如果有)之前執行的指令碼。
-
輸入 SQL 以在複製後執行。在示範中、我們執行命令來關閉開發 / 測試 / 報告資料庫的資料庫歸檔模式。
-
視需要設定電子郵件通知。
-
檢閱摘要、按一下
Finish
以開始複製。 -
監控中的複製工作
Monitor
索引標籤。我們觀察到、複製資料庫約 300 GB 的資料庫磁碟區大小約需 8 分鐘。 -
從 SnapCenter 驗證複製資料庫、此資料庫會立即在中登錄
Resources
在複製作業後立即按下 Tab 鍵。 -
從複製 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 資料庫複製到同一個待命資料庫。
何處可找到其他資訊
若要深入瞭解本文件所述資訊、請參閱下列文件及 / 或網站:
-
Data Guard 概念與管理
-
WP-7357 :在 EC2 和 FSX 最佳實務做法上部署 Oracle 資料庫
-
Amazon FSX ONTAP
-
Amazon EC2