Skip to main content
NetApp Solutions
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

TR-5002:《借助Azure NetApp Files降低Oracle Active Data Guard成本》

贡献者

NetApp公司Allen Cao、Niyaz Mohamed

该解决方案提供了使用Microsoft Azure NetApp Files (ANF)作为主数据库存储和备用数据库存储来配置Oracle Data Guard的概述和详细信息、以降低Azure云中Oracle Data Guard HA/DR解决方案的许可和运营成本。

目的

Oracle Data Guard可确保主数据库和备用数据库复制配置中企业数据的高可用性、数据保护和灾难恢复。Oracle Active Data Guard使用户能够在从主数据库到备用数据库的数据复制处于活动状态时访问备用数据库。Data Guard是Oracle数据库企业版的一项功能。它不需要单独的许可。另一方面、Active Data Guard是Oracle数据库企业版选件、因此需要单独的许可。在Active Data Guard设置中、多个备用数据库可以从主数据库接收数据复制。但是、每个附加备用数据库都需要Active Data Guard许可证以及与主数据库大小相同的额外存储。运营成本会迅速增加。

如果您希望降低Oracle数据库运营成本、并计划在Azure云中设置Active 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数据库克隆刷新生命周期管理。

audience

此解决方案 适用于以下人员:

  • 在Azure云中设置Oracle Active Data Guard以实现高可用性、数据保护和灾难恢复的数据库管理人员。

  • 对Azure云中的Oracle Active Data Guard配置感兴趣的数据库解决方案架构师。

  • 管理支持Oracle Data Guard的Azure NetApp Files存储的存储管理员。

  • 希望在Azure云环境中部署Oracle Data Guard的应用程序所有者。

解决方案 测试和验证环境

此解决方案的测试和验证是在Azure云实验室设置中执行的、该设置可能与实际用户部署环境不匹配。有关详细信息,请参阅一节 部署注意事项的关键因素

架构

此图详细展示了在ANF上的Azure云中实施的Oracle Data Guard。

硬件和软件组件

* 硬件 *

Azure NetApp Files

Microsoft提供的当前版本

两个3 TiB容量池、标准服务级别、自动QoS

适用于数据库服务器的Azure VM

标准B4ms (4个vCPU、16 GiB内存)

三个DB VM、一个用作主数据库服务器、一个用作备用数据库服务器、第三个用作克隆数据库服务器

软件

RedHat 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配置

* 数据库 *

DB_UNIQUE_NAME

Oracle Net Service Name

主卷

nta_ny

NTAP_NY.internal.cloudapp.net

备用

nta_la

NTAP_LA.internal.cloudapp.net

部署注意事项的关键因素

  • *备用数据库克隆。*在从主数据库接收和应用事务日志时、可以克隆物理备用数据库并将其挂载到数据库VM上、以支持开发、测试或报告等其他工作负载。克隆可以是精简克隆、也可以是厚克隆。此时、ANF仅支持厚克隆、即备用数据库的完整副本。不久将发布ANF精简克隆选项。对于精简克隆的数据库卷副本、它与备用数据库共享相同的数据库卷、并利用写时复制技术为写入IO提供服务。因此、克隆的存储效率非常高、可用于许多其他使用情形、只需为新写入IO分配最少的增量新存储即可。这样可以大幅减少Active Data Guard存储占用空间、从而显著节省存储成本。NetApp建议在数据库从主存储切换到备用ANF存储时尽量减少FlexClone活动、以便将Oracle性能保持在较高水平。

  • * Oracle软件要求。*一般来说、物理备用数据库必须与主数据库具有相同的Database Home版本、包括修补程序集例外(Patch Set例外、PSE)、关键修补程序更新(Critical Patch Update、CPU)、 和补丁集更新(PSU)、除非正在执行Oracle Data Guard Standby-First Patch Apply进程(如上的My Oracle Support note 1265700.1中所述) "support.oracle.com"

  • *备用数据库目录结构注意事项。*如果可能、主系统和备用系统上的数据文件、日志文件和控制文件应具有相同的名称和路径名称、并使用最佳灵活架构(OFA)命名约定。备用数据库上的归档目录也应在站点之间完全相同、包括大小和结构。此策略允许备份、切换和故障转移等其他操作执行相同的步骤集、从而降低维护复杂性。

  • *强制日志记录模式。*要防止主数据库中未记录的无法传播到备用数据库的直接写入、请在执行数据文件备份以创建备用数据库之前、在主数据库中启用强制日志记录。

  • *Azure虚拟机大小。*在这些测试和验证中、我们使用了一个Azure VM—Standard"、B4ms、带有4个vCPU和16 GiB内存。您需要根据实际工作负载要求、根据vCPU数量和RAM量适当地调整Azure DB VM的大小。

  • * Azure NetApp Files配置。*Azure NetApp Files在Azure NetApp存储帐户中分配为 Capacity Pools。在这些测试和验证中、我们部署了一个3 TiB容量池、用于在东部地区托管Oracle主数据库、并在西部2地区托管备用数据库。ANF容量池具有三个服务级别:标准、高级和超高。  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数据库与带有ANF存储的Azure中的物理备用Oracle数据库之间设置Oracle Data Guard的分步部署过程。

部署的前提条件

Details

部署需要满足以下前提条件。

  1. 已设置Azure云帐户、并且已在Azure帐户中创建必要的vNet和网络子网。

  2. 在Azure云门户控制台中、您至少需要部署三个Azure Linux VM、一个作为主Oracle数据库服务器、一个作为备用Oracle数据库服务器、以及一个克隆目标数据库服务器、用于报告、开发和测试等。有关环境设置的详细信息、请参见上一节中的架构图。有关详细信息、另请查看Microsoft"Azure 虚拟机"

  3. 主Oracle数据库应已安装并配置在主Oracle数据库服务器中。另一方面、在备用Oracle数据库服务器或克隆Oracle数据库服务器中、仅安装Oracle软件、而不创建Oracle数据库。理想情况下、Oracle文件目录布局应在所有Oracle数据库服务器上完全匹配。有关NetApp建议在Azure云和ANF中自动部署Oracle的详细信息、请参阅以下技术报告以获得帮助。

  4. 从Azure云门户控制台中、部署两个ANF存储容量池以托管Oracle数据库卷。ANF存储容量池应位于不同的区域、以模拟真正的DataGuard配置。如果您不熟悉ANF存储的部署、请参见文档"快速入门:设置 Azure NetApp Files 并创建 NFS 卷"以获取分步说明。

    显示Azure环境配置的屏幕截图。

  5. 如果主Oracle数据库和备用Oracle数据库位于两个不同的区域、则应配置VPN网关、以允许数据流量在两个不同的VNet之间流动。本文档不会详细介绍Azure中的网络配置。以下屏幕截图提供了有关如何在实验室中配置、连接VPN网关以及确认数据流量的一些参考。

    实验室VPN网关:显示Azure环境配置的屏幕截图。

    主vnet网关:显示Azure环境配置的屏幕截图。

    vnet网关连接状态:显示Azure环境配置的屏幕截图。

    验证是否已建立流量(单击三个圆点以打开页面):显示Azure环境配置的屏幕截图。

为Data Guard准备主数据库

Details

在此演示中、我们已在主Azure数据库服务器上设置了一个名为NTAP的主Oracle数据库、其中包含三个NFS挂载点:/u01表示Oracle二进制文件、/u02表示Oracle数据文件、/u03表示Oracle活动日志、归档日志文件和冗余Oracle控制文件。下面说明了设置主数据库以实现Oracle Data Guard保护的详细过程。所有步骤均应以Oracle数据库所有者或默认用户身份执行 oracle

  1. 主Azure数据库服务器orap.internal.cloudapp.net上的主数据库NTONTAP最初部署为独立数据库、并将ANF作为数据库存储。

    orap.internal.cloudapp.net:
    resource group: ANFAVSRG
    Location: East US
    size: Standard B4ms (4 vcpus, 16 GiB memory)
    OS: Linux (redhat 8.6)
    pub_ip: 172.190.207.231
    pri_ip: 10.0.0.4
    
    [oracle@orap ~]$ df -h
    Filesystem                 Size  Used Avail Use% Mounted on
    devtmpfs                   7.7G  4.0K  7.7G   1% /dev
    tmpfs                      7.8G     0  7.8G   0% /dev/shm
    tmpfs                      7.8G  209M  7.5G   3% /run
    tmpfs                      7.8G     0  7.8G   0% /sys/fs/cgroup
    /dev/mapper/rootvg-rootlv   22G  413M   22G   2% /
    /dev/mapper/rootvg-usrlv    10G  2.1G  8.0G  21% /usr
    /dev/sda1                  496M  181M  315M  37% /boot
    /dev/mapper/rootvg-homelv  2.0G   47M  2.0G   3% /home
    /dev/sda15                 495M  5.8M  489M   2% /boot/efi
    /dev/mapper/rootvg-varlv   8.0G  1.1G  7.0G  13% /var
    /dev/mapper/rootvg-tmplv    12G  120M   12G   1% /tmp
    /dev/sdb1                   32G   49M   30G   1% /mnt
    10.0.2.36:/orap-u02        500G  7.7G  493G   2% /u02
    10.0.2.36:/orap-u03        450G  6.1G  444G   2% /u03
    10.0.2.36:/orap-u01        100G  9.9G   91G  10% /u01
    
    [oracle@orap ~]$ cat /etc/oratab
    #
    
    
    
    # This file is used by ORACLE utilities.  It is created by root.sh
    # and updated by either Database Configuration Assistant while creating
    # a database or ASM Configuration Assistant while creating ASM instance.
    
    # A colon, ':', is used as the field terminator.  A new line terminates
    # the entry.  Lines beginning with a pound sign, '#', are comments.
    #
    # Entries are of the form:
    #   $ORACLE_SID:$ORACLE_HOME:<N|Y>:
    #
    # The first and second fields are the system identifier and home
    # directory of the database respectively.  The third field indicates
    # to the dbstart utility that the database should , "Y", or should not,
    # "N", be brought up at system boot time.
    #
    # Multiple entries with the same $ORACLE_SID are not allowed.
    #
    #
    NTAP:/u01/app/oracle/product/19.0.0/NTAP:N
  2. 以Oracle用户身份登录到主数据库服务器。通过sqlplus登录到数据库、在主系统上启用强制日志记录。

    alter database force logging;
    [oracle@orap admin]$ sqlplus / as sysdba
    
    SQL*Plus: Release 19.0.0.0.0 - Production on Tue Nov 26 20:12:02 2024
    Version 19.18.0.0.0
    
    Copyright (c) 1982, 2022, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.18.0.0.0
    
    SQL> alter database force logging;
    
    Database altered.
  3. 从sqlplus中、在主数据库上启用回闪。通过回闪、可以在故障转移后轻松地将主数据库恢复为备用数据库。

    alter database flashback on;
    SQL> alter database flashback on;
    
    Database altered.
  4. 使用Oracle密码文件配置重做传输身份验证—如果未设置pwd实用程序、请使用orapwd实用程序在主系统上创建一个pwd文件、然后将其复制到备用数据库$oracle_HOME/dbs目录。

  5. 在主数据库上创建与当前联机日志文件大小相同的备用重做日志。日志组比联机日志文件组多一个。然后、在发生故障转移并开始接收重做数据时、主数据库可以快速过渡到备用角色。重复执行以下命令四次以创建四个备用日志文件。

    alter database add standby logfile thread 1 size 200M;
    SQL> alter database add standby logfile thread 1 size 200M;
    
    Database altered.
    
    SQL> /
    
    Database altered.
    
    SQL> /
    
    Database altered.
    
    SQL> /
    
    Database altered.
    
    
    SQL> set lin 200
    SQL> col member for a80
    SQL> select group#, type, member from v$logfile;
    
        GROUP# TYPE    MEMBER
    ---------- ------- --------------------------------------------------------------------------------
             3 ONLINE  /u03/orareco/NTAP/onlinelog/redo03.log
             2 ONLINE  /u03/orareco/NTAP/onlinelog/redo02.log
             1 ONLINE  /u03/orareco/NTAP/onlinelog/redo01.log
             4 STANDBY /u03/orareco/NTAP/onlinelog/o1_mf_4__2m115vkv_.log
             5 STANDBY /u03/orareco/NTAP/onlinelog/o1_mf_5__2m3c5cyd_.log
             6 STANDBY /u03/orareco/NTAP/onlinelog/o1_mf_6__2m4d7dhh_.log
             7 STANDBY /u03/orareco/NTAP/onlinelog/o1_mf_7__2m5ct7g1_.log
  6. 在sqlplus中,从spfile创建一个要编辑的pfile。

    create pfile='/home/oracle/initNTAP.ora' from spfile;
  7. 修改pfile并添加以下参数。

    vi /home/oracle/initNTAP.ora
    Update the following parameters if not set:
    
    DB_NAME=NTAP
    DB_UNIQUE_NAME=NTAP_NY
    LOG_ARCHIVE_CONFIG='DG_CONFIG=(NTAP_NY,NTAP_LA)'
    LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=NTAP_NY'
    LOG_ARCHIVE_DEST_2='SERVICE=NTAP_LA ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=NTAP_LA'
    REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
    FAL_SERVER=NTAP_LA
    STANDBY_FILE_MANAGEMENT=AUTO
  8. 从sqlplus中、从修订后的pfile重新创建spfile、以覆盖$oracle_HOME/dbs目录中的现有spfile。

    create spfile='$ORACLE_HOME/dbs/spfileNTAP.ora' from pfile='/home/oracle/initNTAP.ora';
  9. 修改$oracle_HOME/network/admin目录中的oracle tnsnames.ora以添加db_UNIQUE_NAME进行名称解析。

    vi $ORACLE_HOME/network/admin/tnsnames.ora
    # tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.0.0/NTAP/network/admin/tnsnames.ora
    # Generated by Oracle configuration tools.
    
    NTAP_NY =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = orap.internal.cloudapp.net)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SID = NTAP)
        )
      )
    
    NTAP_LA =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = oras.internal.cloudapp.net)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SID = NTAP)
        )
      )
    
    LISTENER_NTAP =
      (ADDRESS = (PROTOCOL = TCP)(HOST = orap.internal.cloudapp.net)(PORT = 1521))
    备注 如果您选择以与默认名称不同的方式命名Azure数据库服务器、请将这些名称添加到本地主机文件中以进行主机名解析。
  10. 将主数据库的数据防护服务名称NTAP_NY_DGMGRL.internal.cloudapp.net添加到listener.ora文件中。

    vi $ORACLE_HOME/network/admin/listener.ora
    # listener.ora Network Configuration File: /u01/app/oracle/product/19.0.0/NTAP/network/admin/listener.ora
    # Generated by Oracle configuration tools.
    
    LISTENER.NTAP =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = orap.internal.cloudapp.net)(PORT = 1521))
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        )
      )
    
    SID_LIST_LISTENER.NTAP =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = NTAP_NY_DGMGRL.internal.cloudapp.net)
          (ORACLE_HOME = /u01/app/oracle/product/19.0.0/NTAP)
          (SID_NAME = NTAP)
        )
      )
  11. 通过sqlplus关闭并重新启动数据库、并验证数据防护参数现在是否处于活动状态。

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

至此、Data Guard的主数据库设置完成。

准备备用数据库并激活Data Guard

Details

Oracle Data Guard需要在备用数据库服务器上配置操作系统内核和Oracle软件堆栈(包括修补程序集)、以便与主数据库服务器匹配。为了便于管理和简化、备用数据库服务器的数据库存储配置也应与主数据库服务器相匹配、例如数据库目录布局和NFS挂载点大小。下面详细介绍了设置备用Oracle数据库服务器和激活Oracle DataGuard for HA/DR保护的过程。所有命令都应以默认Oracle所有者用户ID执行 oracle

  1. 首先、查看主Oracle数据库服务器上主数据库的配置。在此演示中、我们已在主数据库服务器中设置了一个名为NTA的主Oracle数据库、并在ANF存储上安装了三个NFS挂载。

  2. 如果按照NetApp文档TR-4987设置Oracle备用数据库服务器,"TR-4987:《在采用NFS的Azure NetApp Files上简化的自动化Oracle部署》"请使用中步骤2中的 `Playbook execution`标记运行Oracle自动安装。 `-t software_only_install`下面列出了经过修订的命令语法。此标记允许安装和配置Oracle软件堆栈、但不会创建数据库。

    ansible-playbook -i hosts 4-oracle_config.yml -u azureuser -e @vars/vars.yml -t software_only_install
  3. 演示实验室中备用站点上的备用Oracle数据库服务器配置。

    oras.internal.cloudapp.net:
    resource group: ANFAVSRG
    Location: West US 2
    size: Standard B4ms (4 vcpus, 16 GiB memory)
    OS: Linux (redhat 8.6)
    pub_ip: 172.179.119.75
    pri_ip: 10.0.1.4
    
    [oracle@oras ~]$ df -h
    Filesystem                 Size  Used Avail Use% Mounted on
    devtmpfs                   7.7G     0  7.7G   0% /dev
    tmpfs                      7.8G     0  7.8G   0% /dev/shm
    tmpfs                      7.8G  265M  7.5G   4% /run
    tmpfs                      7.8G     0  7.8G   0% /sys/fs/cgroup
    /dev/mapper/rootvg-rootlv   22G  413M   22G   2% /
    /dev/mapper/rootvg-usrlv    10G  2.1G  8.0G  21% /usr
    /dev/sda1                  496M  181M  315M  37% /boot
    /dev/mapper/rootvg-varlv   8.0G  985M  7.1G  13% /var
    /dev/mapper/rootvg-homelv  2.0G   52M  2.0G   3% /home
    /dev/mapper/rootvg-tmplv    12G  120M   12G   1% /tmp
    /dev/sda15                 495M  5.8M  489M   2% /boot/efi
    /dev/sdb1                   32G   49M   30G   1% /mnt
    10.0.3.36:/oras-u01        100G  9.5G   91G  10% /u01
    10.0.3.36:/oras-u02        500G  8.1G  492G   2% /u02
    10.0.3.36:/oras-u03        450G  4.8G  446G   2% /u03
  4. 安装并配置Oracle软件后、请设置Oracle主目录和路径。此外、如果尚未从备用$oracle_home DBS目录中复制主数据库中的Oracle密码、请执行此操作。

    export ORACLE_HOME=/u01/app/oracle/product/19.0.0/NTAP
    export PATH=$PATH:$ORACLE_HOME/bin
    scp oracle@10.0.0.4:$ORACLE_HOME/dbs/orapwNTAP .
  5. 使用以下条目更新tnsnames.ora文件。

    vi $ORACLE_HOME/network/admin/tnsnames.ora
    # tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.0.0/NTAP/network/admin/tnsnames.ora
    # Generated by Oracle configuration tools.
    
    NTAP_NY =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = orap.internal.cloudapp.net)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SID = NTAP)
        )
      )
    
    NTAP_LA =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = oras.internal.cloudapp.net)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SID = NTAP)
        )
      )
  6. 将数据库数据防护服务名称添加到listener.ora文件。

    vi $ORACLE_HOME/network/admin/listener.ora
    # listener.ora Network Configuration File: /u01/app/oracle/product/19.0.0/NTAP/network/admin/listener.ora
    # Generated by Oracle configuration tools.
    
    LISTENER.NTAP =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = oras.internal.cloudapp.net)(PORT = 1521))
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        )
      )
    
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = NTAP)
        )
      )
    
    SID_LIST_LISTENER.NTAP =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = NTAP_LA_DGMGRL.internal.cloudapp.net)
          (ORACLE_HOME = /u01/app/oracle/product/19.0.0/NTAP)
          (SID_NAME = NTAP)
        )
      )
    
    LISTENER =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = oras.internal.cloudapp.net)(PORT = 1521))
      )
  7. 启动dbca以从主数据库NT助手 中对备用数据库进行初始化。

    dbca -silent -createDuplicateDB -gdbName NTAP -primaryDBConnectionString orap.internal.cloudapp.net:1521/NTAP_NY.internal.cloudapp.net -sid NTAP -initParams fal_server=NTAP_NY -createAsStandby -dbUniqueName NTAP_LA
    [oracle@oras admin]$ dbca -silent -createDuplicateDB -gdbName NTAP -primaryDBConnectionString orap.internal.cloudapp.net:1521/NTAP_NY.internal.cloudapp.net -sid NTAP -initParams fal_server=NTAP_NY -createAsStandby -dbUniqueName NTAP_LA
    Enter SYS user password:
    
    Prepare for db operation
    22% complete
    Listener config step
    44% complete
    Auxiliary instance creation
    67% complete
    RMAN duplicate
    89% complete
    Post duplicate database operations
    100% complete
    
    Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/NTAP_LA/NTAP_LA.log" for further details.
  8. 验证备份的备用数据库。新复制的备用数据库最初以只读模式打开。

    [oracle@oras admin]$ cat /etc/oratab
    #
    
    
    
    # This file is used by ORACLE utilities.  It is created by root.sh
    # and updated by either Database Configuration Assistant while creating
    # a database or ASM Configuration Assistant while creating ASM instance.
    
    # A colon, ':', is used as the field terminator.  A new line terminates
    # the entry.  Lines beginning with a pound sign, '#', are comments.
    #
    # Entries are of the form:
    #   $ORACLE_SID:$ORACLE_HOME:<N|Y>:
    #
    # The first and second fields are the system identifier and home
    # directory of the database respectively.  The third field indicates
    # to the dbstart utility that the database should , "Y", or should not,
    # "N", be brought up at system boot time.
    #
    # Multiple entries with the same $ORACLE_SID are not allowed.
    #
    #
    NTAP:/u01/app/oracle/product/19.0.0/NTAP:N
    [oracle@oras admin]$ export ORACLE_SID=NTAP
    [oracle@oras admin]$ sqlplus / as sysdba
    
    SQL*Plus: Release 19.0.0.0.0 - Production on Tue Nov 26 23:04:07 2024
    Version 19.18.0.0.0
    
    Copyright (c) 1982, 2022, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.18.0.0.0
    
    SQL> select name, open_mode from v$database;
    
    NAME      OPEN_MODE
    --------- --------------------
    NTAP      READ ONLY
    
    SQL> show parameter name
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    cdb_cluster_name                     string
    cell_offloadgroup_name               string
    db_file_name_convert                 string
    db_name                              string      NTAP
    db_unique_name                       string      NTAP_LA
    global_names                         boolean     FALSE
    instance_name                        string      NTAP
    lock_name_space                      string
    log_file_name_convert                string
    pdb_file_name_convert                string
    processor_group_name                 string
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    service_names                        string      NTAP_LA.internal.cloudapp.net
    SQL> show parameter log_archive_config
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    log_archive_config                   string      DG_CONFIG=(NTAP_NY,NTAP_LA)
    SQL> show parameter fal_server
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    fal_server                           string      NTAP_NY
    SQL> select name from v$datafile;
    
    NAME
    --------------------------------------------------------------------------------
    /u02/oradata/NTAP/system01.dbf
    /u02/oradata/NTAP/sysaux01.dbf
    /u02/oradata/NTAP/undotbs01.dbf
    /u02/oradata/NTAP/pdbseed/system01.dbf
    /u02/oradata/NTAP/pdbseed/sysaux01.dbf
    /u02/oradata/NTAP/users01.dbf
    /u02/oradata/NTAP/pdbseed/undotbs01.dbf
    /u02/oradata/NTAP/NTAP_pdb1/system01.dbf
    /u02/oradata/NTAP/NTAP_pdb1/sysaux01.dbf
    /u02/oradata/NTAP/NTAP_pdb1/undotbs01.dbf
    /u02/oradata/NTAP/NTAP_pdb1/users01.dbf
    
    NAME
    --------------------------------------------------------------------------------
    /u02/oradata/NTAP/NTAP_pdb2/system01.dbf
    /u02/oradata/NTAP/NTAP_pdb2/sysaux01.dbf
    /u02/oradata/NTAP/NTAP_pdb2/undotbs01.dbf
    /u02/oradata/NTAP/NTAP_pdb2/users01.dbf
    /u02/oradata/NTAP/NTAP_pdb3/system01.dbf
    /u02/oradata/NTAP/NTAP_pdb3/sysaux01.dbf
    /u02/oradata/NTAP/NTAP_pdb3/undotbs01.dbf
    /u02/oradata/NTAP/NTAP_pdb3/users01.dbf
    
    19 rows selected.
    
    SQL> select name from v$controlfile;
    
    NAME
    --------------------------------------------------------------------------------
    /u02/oradata/NTAP/control01.ctl
    /u03/orareco/NTAP_LA/control02.ctl
    
    SQL> col member form a80
    SQL> select group#, type, member from v$logfile order by 2, 1;
    
        GROUP# TYPE    MEMBER
    ---------- ------- --------------------------------------------------------------------------------
             1 ONLINE  /u03/orareco/NTAP_LA/onlinelog/o1_mf_1_mndl6mxh_.log
             2 ONLINE  /u03/orareco/NTAP_LA/onlinelog/o1_mf_2_mndl7jdb_.log
             3 ONLINE  /u03/orareco/NTAP_LA/onlinelog/o1_mf_3_mndl8f03_.log
             4 STANDBY /u03/orareco/NTAP_LA/onlinelog/o1_mf_4_mndl99m7_.log
             5 STANDBY /u03/orareco/NTAP_LA/onlinelog/o1_mf_5_mndlb67d_.log
             6 STANDBY /u03/orareco/NTAP_LA/onlinelog/o1_mf_6_mndlc2tw_.log
             7 STANDBY /u03/orareco/NTAP_LA/onlinelog/o1_mf_7_mndlczhb_.log
    
    7 rows selected.
  9. 在阶段重新启动备用数据库 mount、然后执行以下命令以激活备用数据库托管恢复。

    alter database recover managed standby database disconnect from session;
    SQL> shutdown immediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup mount;
    ORACLE instance started.
    
    Total System Global Area 6442449688 bytes
    Fixed Size                  9177880 bytes
    Variable Size            1090519040 bytes
    Database Buffers         5335154688 bytes
    Redo Buffers                7598080 bytes
    Database mounted.
    SQL> alter database recover managed standby database disconnect from session;
    
    Database altered.
  10. 验证备用数据库恢复状态。请注意 recovery logmerger 在中 APPLYING_LOG 操作。

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

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

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

17 rows selected.

SQL>

这样、在启用受管备用恢复的情况下、完成了从主到备用的NTONTAP Data Guard保护设置。

设置Data Guard代理

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@orap ~]$ dgmgrl sys@NTAP_NY
    DGMGRL for Linux: Release 19.0.0.0.0 - Production on Wed Dec 11 20:53:20 2024
    Version 19.18.0.0.0
    
    Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
    
    Welcome to DGMGRL, type "help" for information.
    Password:
    Connected to "NTAP_NY"
    Connected as SYSDBA.
    DGMGRL>
  3. 创建并启用Data Guard 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)
  4. 在Data Guard Broker管理框架内验证数据库状态。

    DGMGRL> show database db1_ny;
    
    Database - db1_ny
    
      Role:               PRIMARY
      Intended State:     TRANSPORT-ON
      Instance(s):
        db1
    
    Database Status:
    SUCCESS
    
    DGMGRL> show database db1_la;
    
    Database - db1_la
    
      Role:               PHYSICAL STANDBY
      Intended State:     APPLY-ON
      Transport Lag:      0 seconds (computed 1 second ago)
      Apply Lag:          0 seconds (computed 1 second ago)
      Average Apply Rate: 2.00 KByte/s
      Real Time Query:    OFF
      Instance(s):
        db1
    
    Database Status:
    SUCCESS
    
    DGMGRL>

发生故障时、可以使用Data Guard Broker将主数据库瞬时故障转移到备用数据库。如果 `Fast-Start Failover`已启用、则在检测到故障时、Data Guard Broker可以将主数据库故障转移到备用数据库、而无需用户干预。

克隆备用数据库以用于其他使用情形

Details

在Oracle Data Guard设置中、将Oracle备用数据库托管在ANF上的主要优势在于、如果启用了精简克隆、则可以快速克隆该数据库以满足许多其他使用情形的需要、而额外的存储投资却极少。NetApp建议使用SnapCenter UI工具管理Oracle DataGuard数据库。在下一节中、我们将演示如何使用NetApp SnapCenter工具为ANF上已挂载和正在恢复的备用数据库卷创建快照和克隆、以用于其他目的、例如开发、测试、报告等。

下面简要介绍了使用SnapCenter从Oracle数据防护中的托管物理备用数据库克隆读/写数据库的过程。有关如何在ANF上为Oracle设置和配置SnapCenter的详细说明、请参阅TR-4988"使用SnapCenter在ANF上执行Oracle数据库备份、恢复和克隆"以了解详细信息。

  1. 我们首先创建一个测试表、然后在主数据库的测试表中插入一行、以此开始使用情形验证。然后、我们将验证事务是否向下遍历到备用、最后遍历克隆。

    [oracle@orap ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 11 16:33:17 2024
    Version 19.18.0.0.0
    
    Copyright (c) 1982, 2022, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.18.0.0.0
    
    SQL> alter session set container=ntap_pdb1;
    
    Session altered.
    
    SQL> create table test(id integer, dt timestamp, event varchar(100));
    
    Table created.
    
    SQL> insert into test values(1, sysdate, 'a test transaction at primary database NTAP on DB server orap.internal.cloudapp.net');
    
    1 row created.
    
    SQL> commit;
    
    Commit complete.
    
    SQL> select * from test;
    
            ID
    ----------
    DT
    ---------------------------------------------------------------------------
    EVENT
    --------------------------------------------------------------------------------
             1
    11-DEC-24 04.38.44.000000 PM
    a test transaction at primary database NTAP on DB server orap.internal.cloudapp.
    net
    
    
    SQL> select instance_name, host_name from v$instance;
    
    INSTANCE_NAME
    ----------------
    HOST_NAME
    ----------------------------------------------------------------
    NTAP
    orap
    
    
    SQL>
  2. 在SnapCenter配置中,中 Settings`添加了一个UNIX用户(用于演示的azureuser)和一个Azure凭据(用于演示的azure_anf) `Credential

    在图形用户界面中显示此步骤的屏幕截图。

  3. 使用azure_anf凭据将ANF存储添加到 Storage Systems。如果Azure子选项中有多个ANF存储帐户、请确保单击下拉列表以选择正确的存储帐户。在此演示中、我们创建了两个专用Oracle存储帐户。

    在图形用户界面中显示此步骤的屏幕截图。

  4. 所有Oracle数据库服务器均已添加到SnapCenter中 Hosts

    在图形用户界面中显示此步骤的屏幕截图。

    备注 克隆数据库服务器应安装并配置具有相同身份的Oracle软件堆栈。在我们的测试案例中、Oracle 19C软件已安装和配置、但未创建数据库。
  5. 创建为脱机/挂载完整数据库备份而定制的备份策略。

    在图形用户界面中显示此步骤的屏幕截图。

  6. 在选项卡中应用备份策略以保护备用数据库 Resources。首次发现时,数据库状态显示为 Not protected

    在图形用户界面中显示此步骤的屏幕截图。

  7. 您可以选择手动触发备份、也可以在应用备份策略后按设定的时间将备份置于计划中。

    在图形用户界面中显示此步骤的屏幕截图。

  8. 备份后、单击数据库名称以打开数据库备份页面。选择要用于数据库克隆的备份、然后单击 `Clone`按钮启动克隆工作流。

    在图形用户界面中显示此步骤的屏幕截图。

  9. 选择 `Complete Database Clone`并将克隆实例命名为SID。

    在图形用户界面中显示此步骤的屏幕截图。

  10. 选择克隆数据库服务器、该服务器托管备用数据库中的克隆数据库。接受数据文件、重做日志的默认设置。将控制文件放在/u03挂载点上。

    在图形用户界面中显示此步骤的屏幕截图。

  11. 基于操作系统的身份验证不需要数据库凭据。将Oracle主目录设置与克隆数据库服务器上配置的设置进行匹配。

    在图形用户界面中显示此步骤的屏幕截图。

  12. 根据需要更改克隆数据库参数、例如降低克隆数据库的PGA或SGA大小。指定要在克隆之前运行的脚本(如果有)。

    在图形用户界面中显示此步骤的屏幕截图。

  13. 输入要在克隆后运行的SQL。在演示中、我们执行了一些命令来关闭开发/测试/报告数据库的数据库归档模式。

    在图形用户界面中显示此步骤的屏幕截图。

  14. 根据需要配置电子邮件通知。

    在图形用户界面中显示此步骤的屏幕截图。

  15. 查看摘要、单击 Finish 以启动克隆。

    在图形用户界面中显示此步骤的屏幕截图。

  16. 在选项卡中监控克隆作业 Monitor。我们发现、克隆数据库卷大小约为950 GB的数据库大约需要14分钟。

    在图形用户界面中显示此步骤的屏幕截图。

  17. 验证SnapCenter中的克隆数据库、该数据库会立即注册到中 Resources 克隆操作后立即单击选项卡。

    在图形用户界面中显示此步骤的屏幕截图。

  18. 从克隆数据库服务器查询克隆数据库。我们验证了主数据库中发生的测试事务已向下遍历到克隆数据库。

    [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中对Oracle备用数据库克隆的演示、以供开发、测试、报告或任何其他用例使用。可以从ANF上的Oracle Data Guard中的同一备用数据库克隆多个Oracle数据库。

从何处查找追加信息

要了解有关本文档中所述信息的更多信息,请查看以下文档和 / 或网站: