TR-5002:使用Azure NetApp Files降低 Oracle Active Data Guard 成本
该解决方案提供了使用 Microsoft Azure NetApp Files (ANF) 作为主数据库和备用数据库存储配置 Oracle Data Guard 的概述和详细信息,以降低 Azure 云中 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 数据库操作成本并计划在 Azure 云中设置 Active Data Guard,那么您应该考虑另一种选择。不要使用 Active Data Guard,而是使用 Data Guard 从主数据库复制到Azure NetApp Files存储上的单个物理备用数据库。随后,可以克隆此备用数据库的多个副本并打开以进行读/写访问,以服务于许多其他用例,例如报告、开发、测试等。最终结果有效地提供了 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 云实验室设置中进行的,该设置可能与实际用户部署环境不匹配。有关更多信息,请参阅部署考虑的关键因素 。
架构
硬件和软件组件
硬件 |
||
Azure NetApp Files |
Microsoft 提供的当前版本 |
两个 3 TiB 容量池、标准服务级别、自动 QoS |
用于数据库服务器的 Azure VM |
标准 B4ms(4 个 vcpus,16 GiB 内存) |
三个数据库虚拟机,一个作为主数据库服务器,一个作为备用数据库服务器,第三个作为克隆数据库服务器 |
软件 |
||
红帽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 |
假设纽约到洛杉矶灾难恢复设置的 Oracle Data Guard 配置
数据库 |
数据库唯一名称 |
Oracle 网络服务名称 |
主云 |
NTAP_NY |
NTAP_NY.internal.cloudapp.net |
备用 |
NTAP_LA |
NTAP_LA.internal.cloudapp.net |
部署考虑的关键因素
-
*备用数据库克隆。*在从主数据库接收和应用事务日志时,可以克隆物理备用数据库并将其安装在 DB VM 上,以支持其他工作负载,例如 DEV、TEST 或 Report。克隆可以是薄克隆或厚克隆。目前,ANF 仅支持厚克隆,即备用数据库的完整副本。 ANF 薄克隆选项即将发布。对于数据库卷的精简克隆副本,它共享备用数据库的相同 DB 卷,并利用写时复制技术来服务写入 IO。因此,克隆的存储效率非常高,可以用于许多其他用例,为新的写入 IO 分配最少且增量的新存储。通过大幅减少 Active Data Guard 存储空间,可以节省大量的存储成本。 NetApp建议在数据库从主存储切换到备用 ANF 存储时尽量减少FlexClone活动,以保持 Oracle 性能处于高水平。
-
*Oracle 软件要求。*一般而言,物理备用数据库必须具有与主数据库相同的数据库主版本,包括补丁集异常 (PSE)、关键补丁更新 (CPU) 和补丁集更新 (PSU),除非正在进行 Oracle Data Guard 备用优先补丁应用过程(如 My Oracle Support 说明 1265700.1 中所述,网址为"support.oracle.com"。
-
*备用数据库目录结构注意事项。*如果可能,主系统和备用系统上的数据文件、日志文件和控制文件应该具有相同的名称和路径名,并使用最佳灵活架构 (OFA) 命名约定。备用数据库上的存档目录在站点之间也应该相同,包括大小和结构。该策略允许其他操作(例如备份、切换和故障转移)执行同一组步骤,从而降低维护复杂性。
-
*强制记录模式。*为了防止主数据库中未记录的直接写入无法传播到备用数据库,请在执行数据文件备份以创建备用数据库之前在主数据库上打开 FORCE LOGGING。
-
Azure VM 大小调整。在这些测试和验证中,我们使用了具有 4 个 vCPU 和 16 GiB 内存的 Azure VM - Standard_B4ms。您需要根据实际工作负载需求,适当调整 Azure DB VM 的大小,以适应 vCPU 数量和 RAM 容量。
-
Azure NetApp Files配置。 Azure NetApp Files在 Azure NetApp存储帐户中分配为
Capacity Pools
。在这些测试和验证中,我们部署了一个 3 TiB 容量池来托管东部区域的 Oracle 主数据库和西部 2 区域的备用数据库。 ANF 容量池有三个服务级别:Standard、Premium 和 Ultra。 ANF容量池的IO容量取决于容量池的大小及其服务等级。对于生产部署, NetApp建议全面评估您的 Oracle 数据库吞吐量要求,并相应地确定数据库容量池的大小。在创建容量池时,可以将 QoS 设置为“自动”或“手动”,并将静态数据加密设置为“单次”或“两次”。 -
dNFS 配置。通过使用 dNFS,在具有 ANF 存储的 Azure 虚拟机上运行的 Oracle 数据库可以比本机 NFS 客户端驱动更多的 I/O。使用NetApp自动化工具包的自动化 Oracle 部署会自动在 NFSv3 上配置 dNFS。
解决方案部署
假设您已将主 Oracle 数据库部署在 VNet 内的 Azure 云环境中,作为设置 Oracle Data Guard 的起点。理想情况下,主数据库部署在具有 NFS 挂载的 ANF 存储上。为 Oracle 数据库存储创建了三个 NFS 挂载点:mount /u01 用于 Oracle 二进制文件,mount /u02 用于 Oracle 数据文件和控制文件,mount /u03 用于 Oracle 当前和存档日志文件以及冗余控制文件。
您的主要 Oracle 数据库也可以在NetApp ONTAP存储或 Azure 生态系统或私有数据中心内的任何其他存储上运行。以下部分提供了在 Azure 中具有 ANF 存储的主 Oracle DB 与 Azure 中具有 ANF 存储的物理备用 Oracle DB 之间设置 Oracle Data Guard 的分步部署过程。
部署先决条件
Details
部署需要以下先决条件。
-
已设置 Azure 云帐户,并在您的 Azure 帐户内创建了必要的 VNet 和网络子网。
-
从 Azure 云门户控制台,您需要部署至少三个 Azure Linux VM,一个作为主 Oracle DB 服务器,一个作为备用 Oracle DB 服务器,以及一个用于报告、开发和测试等的克隆目标 DB 服务器。有关环境设置的更多详细信息,请参阅上一节中的体系结构图。还审查了微软"Azure 虚拟机"了解更多信息。
-
主 Oracle 数据库应该已经在主 Oracle DB 服务器中安装并配置。另一方面,在备用 Oracle DB 服务器或克隆 Oracle DB 服务器中,仅安装了 Oracle 软件,而没有创建 Oracle 数据库。理想情况下,Oracle 文件目录布局应该与所有 Oracle DB 服务器完全匹配。有关NetApp对 Azure 云和 ANF 中自动化 Oracle 部署的建议的详细信息,请参阅以下技术报告以获取帮助。
-
"TR-4987:使用 NFS 在Azure NetApp Files上简化、自动化 Oracle 部署"
确保在 Azure VM 根卷中分配了至少 128G,以便有足够的空间来暂存 Oracle 安装文件。
-
-
从 Azure 云门户控制台部署两个 ANF 存储容量池来托管 Oracle 数据库卷。 ANF 存储容量池应位于不同的区域,以模拟真正的 DataGuard 配置。如果您不熟悉 ANF 存储的部署,请参阅文档"快速入门:设置Azure NetApp Files并创建 NFS 卷"以获得分步说明。
-
当主 Oracle 数据库和备用 Oracle 数据库位于两个不同的区域时,应配置 VPN 网关以允许两个单独的 VNet 之间的数据流量流动。 Azure 中的详细网络配置超出了本文档的范围。以下屏幕截图提供了有关如何在实验室中配置、连接 VPN 网关以及如何确认数据流量流动的一些参考。
实验室 VPN 网关:
主 VNet 网关:
Vnet网关连接状态:
验证流量是否已建立(单击三个点打开页面):
为 Data Guard 准备主数据库
Details
在此演示中,我们在主 Azure DB 服务器上设置了一个名为 NTAP 的主 Oracle 数据库,它具有三个 NFS 装入点:/u01 用于 Oracle 二进制文件,/u02 用于 Oracle 数据文件和 Oracle 控制文件,/u03 用于 Oracle 活动日志、存档日志文件和冗余 Oracle 控制文件。下面说明了为 Oracle Data Guard 保护设置主数据库的详细过程。所有步骤都应以 Oracle 数据库所有者或默认用户身份执行 `oracle`用户。
-
主 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
-
以 oracle 用户身份登录主数据库服务器。通过 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.
-
从 sqlplus,在主数据库上启用闪回。闪回功能允许在故障转移后轻松地将主数据库恢复为备用数据库。
alter database flashback on;
SQL> alter database flashback on; Database altered.
-
使用 Oracle 密码文件配置重做传输身份验证 - 如果未设置,则使用 orapwd 实用程序在主服务器上创建 pwd 文件,并将其复制到备用数据库 $ORACLE_HOME/dbs 目录。
-
在主数据库上创建与当前在线日志文件大小相同的备用重做日志。日志组比联机日志文件组多一个。然后,当发生故障转移时,主数据库可以快速转换到备用角色并开始接收重做数据。重复以下命令四次,创建四个备用日志文件。
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
-
从 sqlplus,从 spfile 创建一个 pfile 进行编辑。
create pfile='/home/oracle/initNTAP.ora' from spfile;
-
修改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
-
从 sqlplus 中,从修改后的 pfile 重新创建 spfile 以覆盖 $ORACLE_HOME/dbs 目录中现有的 spfile。
create spfile='$ORACLE_HOME/dbs/spfileNTAP.ora' from pfile='/home/oracle/initNTAP.ora';
-
修改 $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 服务器命名为与默认名称不同的名称,请将名称添加到本地主机文件以进行主机名解析。 -
将主数据库的数据保护服务名称 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) ) )
-
通过 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 需要操作系统内核配置和 Oracle 软件堆栈(包括备用数据库服务器上的补丁集)以与主数据库服务器匹配。为了便于管理和简单起见,备用数据库服务器的数据库存储配置理想情况下也应该与主数据库服务器匹配,例如数据库目录布局和 NFS 挂载点的大小。以下是设置备用 Oracle DB 服务器和激活 Oracle DataGuard 以实现 HA/DR 保护的详细步骤。所有命令都应以默认 Oracle 所有者用户 ID 执行 oracle
。
-
首先,检查主 Oracle DB 服务器上主数据库的配置。在此演示中,我们在主 DB 服务器中设置了一个名为 NTAP 的主 Oracle 数据库,并在 ANF 存储上安装了三个 NFS。
-
如果您按照NetApp文档 TR-4987 设置 Oracle 备用数据库服务器"TR-4987:使用 NFS 在Azure NetApp Files上简化、自动化 Oracle 部署",使用标签 `-t software_only_install`在步骤 2 中 `Playbook execution`运行自动 Oracle 安装。修改后的命令语法如下所示。该标签将允许安装和配置 Oracle 软件堆栈,但不会创建数据库。
ansible-playbook -i hosts 4-oracle_config.yml -u azureuser -e @vars/vars.yml -t software_only_install
-
演示实验室中备用站点的备用 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
-
安装并配置 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 .
-
使用以下条目更新 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) ) )
-
将 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)) )
-
启动 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.
-
验证重复的备用数据库。新复制的备用数据库最初以只读模式打开。
[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.
-
重新启动备用数据库 `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.
-
验证备用数据库恢复状态。注意 `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 Broker
Details
Oracle Data Guard 代理是一个分布式管理框架,可自动并集中执行 Oracle Data Guard 配置的创建、维护和监控。以下部分演示如何设置 Data Guard Broker 来管理 Data Guard 环境。
-
通过 sqlplus 使用以下命令在主数据库和备用数据库上启动数据保护代理。
alter system set dg_broker_start=true scope=both;
-
从主数据库,以 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>
-
创建并启用 Data Guard Broker 配置。
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)
-
在 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 上已安装和恢复的备用数据库卷进行快照和克隆,以用于其他目的,例如 DEV、TEST、REPORT 等。
以下是使用SnapCenter从 Oracle Data Guard 中的托管物理备用数据库克隆 READ/WRITE 数据库的高级过程。有关如何在 ANF 上设置和配置SnapCenter for Oracle 的详细说明,请参阅 TR-4988"使用SnapCenter在 ANF 上进行 Oracle 数据库备份、恢复和克隆"了解详情。
-
我们通过创建测试表并在主数据库的测试表中插入一行来开始用例验证。然后我们将验证事务是否向下移动到待机状态并最终到达克隆状态。
[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>
-
在SnapCenter配置中,已将 unix 用户(演示版为 azureuser)和 Azure 凭据(演示版为 azure_anf)添加到
Credential`在 `Settings
。 -
使用 azure_anf 凭据将 ANF 存储添加到
Storage Systems
。如果您的 Azure 订阅中有多个 ANF 存储帐户,请确保单击下拉列表以选择正确的存储帐户。我们为此演示创建了两个专用的 Oracle 存储帐户。 -
所有 Oracle DB 服务器均已添加到SnapCenter
Hosts
。克隆数据库服务器应该安装和配置相同的 Oracle 软件堆栈。在我们的测试用例中,Oracle 19C 软件已安装并配置,但未创建数据库。 -
创建针对离线/挂载完整数据库备份定制的备份策略。
-
应用备份策略来保护备用数据库
Resources`选项卡。最初发现时,数据库状态显示为 `Not protected
。 -
您可以选择手动触发备份,或者在应用备份策略后按设定的时间安排备份。
-
备份后,单击数据库名称以打开数据库备份页面。选择用于数据库克隆的备份并单击 `Clone`按钮启动克隆工作流程。
-
选择 `Complete Database Clone`并将克隆实例命名为 SID。
-
选择克隆数据库服务器,该服务器托管从备用数据库克隆的数据库。接受数据文件、重做日志的默认值。将控制文件放在 /u03 挂载点上。
-
基于操作系统的身份验证不需要数据库凭证。将 Oracle 主目录设置与克隆 DB 服务器上的配置进行匹配。
-
如果需要,更改克隆数据库参数,例如降低克隆数据库的 PGA 或 SGA 大小。指定克隆之前要运行的脚本(如果有)。
-
输入克隆后运行的SQL。在演示中,我们执行命令来关闭 dev/test/report 数据库的数据库存档模式。
-
如果需要,配置电子邮件通知。
-
查看摘要,单击 `Finish`开始克隆。
-
监控克隆作业 `Monitor`选项卡。我们观察到克隆一个数据库卷大小约为 950GB 的数据库大约需要 14 分钟。
-
从SnapCenter验证克隆数据库,该数据库会立即在 `Resources`克隆操作后立即标签。
-
从克隆数据库服务器查询克隆数据库。我们验证了主数据库中发生的测试事务已经传递到克隆数据库。
[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
这完成了 Azure ANF 存储上的 Oracle Data Guard 中针对 DEV、TEST、REPORT 或任何其他用例的 Oracle 备用数据库克隆的演示。可以从 ANF 上的 Oracle Data Guard 中的同一个备用数据库克隆多个 Oracle 数据库。
在哪里可以找到更多信息
要了解有关本文档中描述的信息的更多信息,请查看以下文档和/或网站:
-
Azure NetApp Files
-
TR-4988:使用SnapCenter在 ANF 上进行 Oracle 数据库备份、恢复和克隆
-
TR-4987:使用 NFS 在Azure NetApp Files上简化、自动化 Oracle 部署
-
Oracle Data Guard 概念和管理