创建 Data Guard 的备用数据库

主数据库准备好用于 Data Guard 后,就可以将其复制到备用站点。以下指南将使用主动复制功能来创建一致的数据库副本。

请注意,本指南使用以下示例:

数据库唯一名称 服务器主机名 RAC 实例名称 角色
DBDG_SITE1 site1db1site1db2 DBDG_SITE11DBDG_SITE12 主要
DBDG_SITE2 site2db1site2db2 DBDG_SITE21DBDG_SITE22 备用实例

本指南中运行 Oracle 的裸金属解决方案服务器使用以下环境变量进行配置:

环境变量名称
ORACLE_BASE /apps/oracle/oracle_base
ORACLE_HOME /apps/oracle/19.0.0/db_home1

您可能需要根据您的设置修改环境变量路径。

设置备用数据库

配置数据库连接

登录备用位置中的每个裸金属解决方案服务器,并修改 $ORACLE_HOME/network/admin/tsnames.ora 文件以更新网络服务配置:

DBDG_SITE2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE2_SCAN_HOSTNAME)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DBDG_SITE2) (UR=A)
   )
 )

DBDG_SITE1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE1_SCAN_HOSTNAME)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DBDG_SITE1)
    )
  )

配置临时监听器

为避免重启用于其他数据库连接的监听器,我们会使用临时监听器来执行数据库复制。此示例使用端口 1523,但您可以将任何处于开启状态的端口用于集群之间的通信。完成数据库复制后,便可以删除此临时监听器。

  1. 登录备用位置中的第一个裸金属解决方案服务器,以便在数据库复制过程中使用该服务器。修改 $ORACLE_HOME/network/admin/listener.ora 文件以更新网络服务配置:

    LISTENER_DBDG_SITE2 =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = site1db1)(PORT = 1523))
        )
      )
    
    SID_LIST_LISTENER_DBDG_SITE2 =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = DBDG_SITE2_DGMGRL)
          (ORACLE_HOME = ORACLE_HOME)
          (SID_NAME = DBDG_SITE21)
        )
      )
    ADR_BASE_LISTENER = /apps/oracle/oracle_base
    
  2. 启动临时监听器:

    lsnrctl start LISTENER_DBDG_SITE2
    

准备备用数据库

  1. 每个数据库实例都需要一个目录来存储审核日志。在备用数据库位置中的每个裸金属解决方案服务器上创建审核文件目录:

    mkdir -p /apps/oracle/oracle_base/admin/DBDG_SITE2/adump
    
  2. 修改之前复制到备用数据库服务器的 $ORACLE_HOME/dbs/initDBDG_SITE21.ora 文件:

    1. db_unique_name 设置为新的备用数据库名称。
    2. 修改所有特定于实例的参数,以反映备用数据库的实例名称。以下是一些示例:
      • instance_number
      • thread
      • undo_tablespace
    3. 设置 audit_file_dest 参数以使用上一步中创建的目录。
    4. 如果每个位置的 ASM 磁盘组使用不同的名称,请修改 db_file_name_convertlog_file_name_convert 参数以与新的文件位置匹配。
    5. 注释掉 control_files 参数。

    以下示例展示了使用本指南中提供的示例进行修改后的已更新数据库参数文件。请注意,您的参数文件将包含特定于您的数据库设置的其他参数。下面仅显示需要针对备用实例进行修改的参数:

    *.db_unique_name='DBDG_SITE2'
    DBDG_SITE21.instance_number=1
    DBDG_SITE22.instance_number=2
    DBDG_SITE21.thread=1
    DBDG_SITE22.thread=2
    DBDG_SITE21.undo_tablespace='UNDOTBS1'
    DBDG_SITE22.undo_tablespace='UNDOTBS2'
    *.audit_file_dest='/apps/oracle/oracle_base/admin/DBDG_SITE2/adump'
    #*.control_files='+DATA/DBDG_SITE1/CONTROLFILE/current.258.1091317089','+RECO/DBDG_SITE1/CONTROLFILE/current.257.1091317089'
    
  3. /etc/oratab 文件中添加一个条目,以便 oraenv 命令可以为备用数据库设置环境变量:

    DBDG_SITE21:ORACLE_HOME:N
    

创建备用数据库

  1. 设置 ORACLE_SID 环境变量,以便连接到备用数据库:

    source oraenv <<< "DBDG_SITE21"
    

    您应该会收到响应 The Oracle base has been set to /apps/oracle/oracle_base

  2. 在复制主数据库之前,您必须先在一个节点上手动启动备用实例。登录备用位置中的第一个裸金属解决方案服务器,启动 SQL*Plus,然后使用 pfilenomount mode 下启动备用数据库:

    sqlplus / as sysdba
    
    STARTUP NOMOUNT PFILE='/apps/oracle/19.0.0/db_home1/dbs/initDBDG_SITE21.ora';
    

    如果成功,您应该会收到类似于以下示例的响应:

    ORACLE instance started.
    Total System Global Area 1.2885E+10 bytes
    Fixed Size 15988824 bytes
    Variable Size 1845493760 bytes
    Database Buffers 1.1006E+10 bytes
    Redo Buffers 17563648 bytes
    
  3. 启动实例后退出 SQL*Plus:

    EXIT;
    
  4. 验证与备用数据库服务的连接。从主数据库位置的每个裸金属解决方案服务器,尝试使用 SQL*Plus 连接到备用实例。手动输入 SYS 远程登录密码以成功连接到实例。

    sqlplus sys@DBDG_SITE2_FOR_DUPLICATION as sysdba
    

    如果成功,您应该会收到标准 SQL*Plus 提示符,您可以在其中检查实例参数:

    SHOW PARAMETER DB_UNIQUE_NAME;
    

    您应该会收到类似如下所示的响应:

                    NAME        TYPE                          VALUE
        ---------------- ----------- ------------------------------
          db_unique_name      string      DBDG_SITE2
    
  5. 检查 DB_UNIQUE_NAME 参数后退出 SQL*Plus:

    EXIT;
    
  6. 连接到恢复管理器,然后运行 duplicate 命令以从活跃的主数据库复制备用实例:

    rman TARGET sys@DBDG_SITE1 AUXILIARY sys@DBDG_SITE2_FOR_DUPLICATION
    
    DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE NOFILENAMECHECK;
    

    如果成功,您应该会在处理完成后收到类似以下示例的消息:

    Finished Duplicate Db at ...
    
  7. 退出恢复管理器:

    EXIT;
    

完成备用数据库创建

  1. 在数据库复制期间,ASM 会为备用数据库创建新的控制文件。连接到新的备用实例并获取新的控制文件名。以下示例展示了存储在 +DATA+RECO 磁盘组中的两个控制文件:

    sqlplus / as sysdba
    
    SET LINESIZE 140
    COLUMN NAME FORMAT a15
    COLUMN VALUE FORMAT a125
    SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='control_files';
    

    控制文件名显示在“值”字段中:

               NAME     VALUE
    --------------- ----------------------------------------------------------------------------------------------------
      control_files   +DATA/DBDG_SITE2/CONTROLFILE/current.258.1091317089, +RECO/DBDG_SITE2/CONTROLFILE/current.257.1091317089
    
  2. 记录上一步中的控制文件名,并将 $ORACLE_HOME/dbs/initDBDG_SITE21.oracontrol_files 参数的所有条目替换为新值。如果有多个控制文件,请用英文单引号封装各个文件,并用英文逗号进行分隔:

    *.control_files='+DATA/DBDG_SITE2/CONTROLFILE/current.258.1091317089','+RECO/DBDG_SITE2/CONTROLFILE/current.257.1091317089'
    
  3. 使用 SQL*Plus 连接到备用数据库,并通过修改后的 pfile 创建新的 spfile

    sqlplus / as sysdba
    
    CREATE SPFILE='+DATA/DBDG_SITE2/spfileDBDG_SITE2' FROM PFILE='/apps/oracle/19.0.0/db_home1/dbs/initDBDG_SITE21.ora';
    
  4. 使用 asmcmd 命令将密码文件复制到 ASM 磁盘组:

    asmcmd cp /apps/oracle/19.0.0/db_home1/dbs/orapwDBDG_SITE21.ora +DATA/DBDG_SITE2/orapwDBDG_SITE2
    
  5. 关停备用数据库实例并删除临时 pfile 和密码文件:

    sqplus / as sysdba
    
    SHUTDOWN IMMEDIATE;
    EXIT;
    
    rm $ORACLE_HOME/dbs/orapwDBDG_SITE21.ora $ORACLE_HOME/dbs/initDBDG_SITE2.ora
    
  6. 停止在备用数据库位置中的第一个裸金属解决方案服务器上用于数据库复制的临时监听器:

    lsnrctl stop LISTENER_DBDG_SITE2
    
  7. 移除备用数据库位置中第一个裸金属解决方案服务器上的 $ORACLE_HOME/network/admin/listener.ora 文件中的临时条目。

  8. 使用 srvctl 命令将新的备用数据库和实例添加到集群注册表:

    srvctl add database \
      -db DBDG_SITE2 \
      -oraclehome /apps/oracle/19.0.0/db_home1 \
      -spfile +DATA/DBDG_SITE2/spfileDBDG_SITE2 \
      -pwfile +DATA/DBDG_SITE2/orapwDBDG_SITE2 \
      -role PHYSICAL_STANDBY \
      -startoption MOUNT
    
    srvctl add instance \
      -db DBDG_SITE2 \
      -instance DBDG_SITE21 \
      -node site2db1
    
    srvctl add instance \
      -db DBDG_SITE2 \
      -instance DBDG_SITE22 \
      -node site2db2
    
  9. 使用 srvctl 命令启动备用数据库:

    srvctl start database -db DBDG_SITE2
    

后续步骤

接下来,配置并启用 Data Guard 代理