准备部署拓扑

为了使 Data Guard 正常工作,不同区域中的两个数据库必须进行通信。因此,您需要通过 OCI 中的两个区域各自的 DRG 在它们之间设置远程对等连接。DRG 由 OracleDB for Azure 设置创建,因此您只需在现有 DRG 之间建立远程对等连接。

设置网络

要设置网络,请执行以下步骤

  1. 为 Azure VM 和 OracleDB(适用于 Azure 数据库系统)设置网络连接。
    • 确保在 Azure VM 上具有可用于 Oracle DB 系统的 ssh 私有密钥。
    • 测试 Azure VM 与 Azure 数据库系统的 OracleDB 之间的连接。
  2. 为 OCI 中的数据库系统设置网络。
    1. 首先,导航到区域 1 中数据库系统的 VCN 详细信息,选择动态路由网关附加,然后选择 DRG 名称,将 DRG 的详细信息加载到区域 1 中。然后,选择 Remote Peering Connection Attachments 。在第二个浏览器窗口中,对区域 2 执行完全相同的操作。
    2. 接下来,在两个区域中,选择创建远程对等连接以创建 RPC。
    3. 创建两个 RPC 后,在区域 1 中选择 RPC 名称并复制 OCID。
    4. 在区域 2 中,选择 RPC 名称并选择建立连接。为区域 1 选择正确的区域名称(我们连接到的区域),并为区域 1 中的 RPC 提供 OCID,在上一步中已复制该 OCID。建立连接几分钟后,对等方状态应为“已对等”。
    5. 接下来,允许两个区域中的 VCN 之间的通信。导航到 VCN 详细信息并选择默认安全列表。选择添加入站规则以允许来自相反 VCN CIDR 范围的流量。
    6. 最后,从 Azure 中的 VM 连接到相应的 OCI 基本数据库系统。编辑两个基本数据库系统的 tnsnames.ora 文件,以便与其他数据库建立连接。
    7. 确认 tnsping 在从两个数据库系统到另一数据库均正常工作。

设置 Oracle Database for Azure DR 配置

要为 Azure DR 配置设置 Oracle 数据库,您需要准备主数据库和辅助数据库,如下所述。

注意:

单击复制可将命令示例保存到剪贴板,以便粘贴到命令行中。请务必将任何 variables 替换为特定于实施的值。

准备主数据库

要准备主数据库,需要配置静态监听程序,更新 tnsnames.ora 文件,以及配置各种数据库设置和参数。

  1. SQL> 提示符下,验证以下信息:
    • 检查是否已启用数据库闪回
    • 检查是否已启用强制数据库日志记录
    • 检查数据库是否处于归档日志模式下
    • 检查数据库是否处于打开模式
    • 检查数据库是否具有主数据库角色
    运行以下命令:
    select log_mode, FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE from v$database ;
    输出应如下所示:
    LOG_MODE              FORCE_LOGGING               FLASHBACK_ON               OPEN_MODE                 DATABASE_ROLE
    ----------------      ------------------------   ----------------------     --------------------        -----------------------
    ARCHIVELOG            YES                         YES                        READ WRITE                  PRIMARY
  2. 通过运行以下命令检查自动备用文件管理是否设置为自动:
    show parameter standby_file_management
    输出应如下所示:
    NAME                                          TYPE          VALUE
    ------------------------------------          -----------  ----------
    standby_file_management                       string       AUTO
  3. 设置中介配置文件:
    show parameter dg_broker_config_file1;
    输出应如下所示:
    NAME                                          TYPE          VALUE
    ------------------------------------         ----------- ------------------------------
    dg_broker_config_file1                        string        /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/dr1dbuks_898_lhr.dat
    

    然后输入以下命令:

    show parameter dg_broker_config_file2;
    输出应如下所示:
    
    NAME                                                     TYPE          VALUE
    ------------------------------------         ----------- ------------------------------
    dg_broker_config_file2                             string          /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/dr2dbuks_898_lhr.dat
  4. 启用 Data Guard 中介:
    show parameter dg_broker_start
    输出应如下所示:
    NAME                                             TYPE         VALUE
    ------------------------------------            ----------- --------------
    dg_broker_start                                  boolean      FALSE
    然后输入以下命令:
    alter system set dg_broker_start=true scope=both;
    
    show parameter dg_broker_start
    输出应如下所示:
    NAME                                             TYPE        VALUE
    ------------------------------------            ----------- --------------
    dg_broker_start                                  boolean     TRUE
  5. 在命令提示符(例如 [oracle@ldbuksdr ]$)中,记下指示灯状态:
    lsnrctl status
  6. 附注数据库配置详细资料:
    srvctl config database -d db_unique_name
  7. 请注意 tns 项:
    cat $ORACLE_HOME/network/admin/tnsnames.ora
  8. 附注 sqlnet.ora 输出:
    cat $ORACLE_HOME/network/admin/sqlnet.ora
  9. 通过输入以下命令,将口令文件复制到 /tmp 位置的备用数据库系统:
    cd .ssh
    scp -i private_key /tmp/orapw<sid> opc@ip_standby_vm:/tmp/orapwsid   
  10. /tmp 位置中找到 wallet 文件并将其复制到备用数据库系统:
    select CON_ID, WRL_PARAMETER, WRL_TYPE, STATUS, WALLET_TYPE from V$ENCRYPTION_WALLET;
    输出应如下所示:
    CON_ID         WRL_PARAMETER                                                                      STATUS       WALLET_TYPE
    ----------    ------------------------------------------------------------------------------     ------------  ------------ ----------------------------
    1              /opt/oracle/dcs/commonstore/wallets/dbuks_898_lhr/tde/                             OPEN          AUTOLOGIN
    2                                                                                                 OPEN          AUTOLOGIN
    3                                                                                                 OPEN          AUTOLOGIN
    
    输入:
    cd /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde
    ls -ltra
    
    您应看到如下内容:
    -rw------- 1 oracle asmadmin  5467 Jun 19 18:59 ewallet.p12
    -rw------- 1 oracle asmadmin  5512 Jun 19 18:59 cwallet.sso
    
    然后输入以下命令(其中 db_unique_name 是 wallet 数据库的唯一名称):
    
    [oracle@ ~]$ cp /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/ewallet.p12/tmp/cwallet.p12
    cp /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/cwallet.sso/tmp/cwallet.sso
    chmod 777 /tmp/ewallet.p12
    chmod 777 /tmp/cwallet.sso
    scp -i private_key /tmp/ewallet.p12 opc@ip_standby_vm:/tmp/ewallet.p12
    scp -i private_key /tmp/cwallet.sso opc@ip_standby_vm:/tmp/cwallet.sso.
  11. 配置静态监听程序。
    备用数据库的初始实例化需要静态监听程序。数据库关闭时,静态监听程序将启用与实例的远程连接,从而允许您使用 Oracle Data Guard 启动实例。确保 listener.ora 文件中没有换行符或空格。

    在主数据库上,附加 listener.ora 文件中的 SID_LIST_LISTENER 文件以包括主数据库的数据库唯一名称、Oracle 主目录和 Oracle 系统标识符 (System Identifier,SID)。

    lsnrctl status 
    vi listener.ora 
    将以下项添加到 listener.ora,其中:
    • DB_UNIQUE_NAME 是主数据库的唯一名称。
    • ORACLE_HOME 是主数据库的本地 Oracle 主目录。
    • ORACLE SID 是主数据库的 SID。
    SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=DB_UNIQUE_NAME)(ORACLE_HOME=ORACLE_HOME) 
    (SID_NAME = ORACLE SID)))
    该项应类似于以下内容(GLOBAL_DBNAMEORACLE_HOMESID_NAME 的项会有所不同):
    SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=dbuks_898_lhr.odsp129521.cvcn.oraclevcn.com)
    (ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1)(SID_NAME=dbuks)))
    重新加载监听程序并检查其状态。
    lsnrctl reload
    lsnrctl status
  12. 配置 tns 条目。
    需要为主和备用 tnsnames.ora 文件中的每个数据库输入条目,以确保正确传输重做。由于数据库之间没有用于将服务器名称解析为 IP 地址的 DNS,因此将使用 IP 地址。使用以下示例替换与配置相关的值。Oracle Real Application Clusters (Oracle RAC) 配置无法解析扫描监听程序名称;因此,您必须使用地址列表定义所有节点。稍后将添加这些 IP 地址,初始实例应在 tns 条目中仅列出一个 IP 地址,以确保 Oracle Recovery Manager (RMAN) 始终连接到相同的节点。
    [oracle@~]$ cd $ORACLE_HOME/network/admin 
    [oracle@~]$ vi tnsnames.ora
    tnsnames.ora 文件中的条目应如下所示:
    DBUKS_R2J_AMS=(DESCRIPTION=(SDU=65536)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3)
    (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.91.0.177)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)
    (SERVICE_NAME=dbuks_r2j_ams.odsp083156.cvcn.oraclevcn.com)(UR=A))) 
    
    DBUKS_898_LHR=(DESCRIPTION=(SDU=65535)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3)
    (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.90.0.246)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)
    (SERVICE_NAME=dbuks_898_lhr.odsp129521.cvcn.oraclevcn.com)(UR=A)))

准备备用数据库

接下来,准备备用数据库。

  1. 手动删除由 Oracle Database for Azure 工具创建的数据库。
    在删除备用数据库之前,请保存当前 db_unique_name 并记下以后将使用的 wallet 位置。以下查询提供了 wallet 位置的详细信息。
    1. 在 sqlplus 命令提示符中,输入::
      select * from V$ENCRYPTION_WALLET; 
    2. 接下来,准备 rm_dbfiles.sql 脚本以删除数据库相关文件:
      srvctl config database -d db_unique_name
    3. 运行以下脚本以关闭作为备用数据库构建的数据库并删除数据库文件:
      vi rm_dbfiles.sql 
      set heading off linesize 999 pagesize 0 feedback off trimspool on 
      spool /home/oracle/demo/files.lst 
      select 'asmcmd rm '||name from v$datafile union all select 'asmcmd rm '||name from v$tempfile union all select 'asmcmd rm '||member from v$logfile; 
      spool off 
      create pfile='/home/oracle/demo/ORACLE_UNQNAME.pfile' from spfile; 
      exit
      
    4. 然后以系统 DBA 的身份转到 sqlplus 提示符:
      sqlplus "/ as sysdba"
      并运行以下命令:
      @rm_dbfiles.sql
      exit
    5. 接下来,授予读取、写入和执行权限(其中 db_unique_name 是受影响数据库的唯一名称):
      chmod 777 files.lst
      srvctl stop database -d db_unique_name
    6. 保存并执行脚本:
      ./files.lst 
    启动器数据库的所有文件现在都已删除。
  2. /tmp 中收到的密码文件和 wallet 文件从主数据库复制到备用数据库数据库系统上的相应位置。
    1. 将数据库密码文件和 /tmp 中收到的 wallet 文件从主数据库复制到备用数据库数据库系统上的相应位置(其中 orapwsid 是 SID 密码):
      sudo cp /tmp/orapwsid $ORACLE_HOME/dbs/orapwsid 
      例如:
      sudo ls -ltra /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks 
      输出应如下所示:
      
      -rw-r-----1 oracle oinstall 2048 Jul3 13:42 /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks
    2. 验证口令文件的 md5sum 输出在主数据库和备用数据库上是否匹配(其中 orapwsid 是 SID 口令):
      md5sum /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwsid 
      主数据库的输出应类似于以下内容(其中 orapwsidorapwdbuks):
      
      b3895fa6357471f80c6e0f4ac16fdc23 /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks 
      
      对于备用数据库:
      
      b3895fa6357471f80c6e0f4ac16fdc23 /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks
    3. 删除现有 wallet 文件并将 wallet 文件从 /tmp 复制到 TDE 位置(其中 db_unique_name 是受影响数据库的唯一名称):
      [oracle@ ~]$ cd /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/
      rm ewallet.p12 cwallet.sso
      sudo cp /tmp/ewallet.p12 /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/ewallet.p12
      sudo cp /tmp/cwallet.sso /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/cwallet.ss
      chown oracle:asmadmin /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/ewallet.p12
      sudo chown oracle:asmadmin /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/cwallet.sso
  3. 配置静态监听程序:
    1. 在 OCI 中的备用数据库上,附加 SID_LIST_LISTENER 文件以包括数据库唯一名称、OCI 的 Oracle 主目录和主数据库的 Oracle 系统标识符 (System Identifier,SID)。
      lsnrctl status
      vi listener.ora
    2. 将以下项添加到 listener.ora 文件中,其中:
      • DB_UNIQUE_NAME 是主数据库的名称。
      • ORACLE_HOME 是主数据库的本地 Oracle 主目录。
      • ORACLE SID 是主数据库的 SID。
       SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=DB_UNIQUE_NAME)(ORACLE_HOME=ORACLE_HOME) 
      (SID_NAME = ORACLE_SID)))
      例如,该条目应类似于以下内容:
      SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME= dbuks_r2j_ams. odsp083156.cvcn.oraclevcn.com)
      (ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1)(SID_NAME=dbuks))) 
    3. 重新加载监听程序并检查状态:
      lsnrctl reload 
      lsnrctl status
  4. 配置 tns 条目:
    cd $ORACLE_HOME/network/admin
    vi tnsnames.ora
    tnsnames.ora 文件中的条目应如下所示:
     DBUKS_R2J_AMS=(DESCRIPTION=(SDU=65536)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3)
    (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.91.0.177)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)
    (SERVICE_NAME=dbuks_r2j_ams.odsp083156.cvcn.oraclevcn.com)(UR=A))) 
    
    DBUKS_898_LHR=(DESCRIPTION=(SDU=65535)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3)
    (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.90.0.246)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)
    (SERVICE_NAME=dbuks_898_lhr.odsp129521.cvcn.oraclevcn.com)(UR=A)))