验证 Data Guard 部署

设置 Data Guard 代理后,您需要验证是否已从主数据库复制重做并将其应用于备用数据库。以下过程可用于从主数据库和备用数据库检查 Data Guard 状态。

本指南中使用了以下示例:

数据库唯一名称 服务器主机名 RAC 实例名称 角色
DBDG_SITE1 site1db2site1db1 DBDG_SITE12DBDG_SITE11 主要
DBDG_SITE2 site2db2site2db1 DBDG_SITE22DBDG_SITE21 备用实例

验证 Data Guard 部署

  1. 登录托管主数据库的第一个裸金属解决方案服务器,然后设置 ORACLE_SID 环境变量,以便连接到主数据库:

    source oraenv <<< "DBDG_SITE11"
    
  2. 启动 SQL*Plus,然后确定已归档的重做日志的最新序列号:

    sqlplus / as sysdba
    
    SELECT THREAD#, max(SEQUENCE#) "Last Primary Seq Archived"
    FROM V$ARCHIVED_LOG VAL, V$DATABASE VDB WHERE VAL.RESETLOGS_CHANGE# =
    VDB.RESETLOGS_CHANGE# GROUP BY THREAD# ORDER BY 1;
    

    在以下输出中,线程 1 的最大序列号为 40,线程 2 的最大序列号为 33:

       THREAD# Last Primary Seq Archived
    ---------- -------------------------
             1                        40
             2                        33
    

    记录结果以与备用数据库进行比较。备用数据库上的序列号应与主数据库匹配。

  3. 登录托管备用数据库的第一个裸金属解决方案服务器,然后设置 ORACLE_SID 环境变量,以便连接到备用数据库:

    source oraenv <<< "DBDG_SITE21"
    
  4. 启动 SQL*Plus,然后验证收到并应用于已归档的重做日志的最新序列号是否与主数据库上的最新序列号相匹配:

    sqlplus / as sysdba
    
    SELECT THREAD#, max(SEQUENCE#) "Last Standby Seq Received"
    FROM V$ARCHIVED_LOG VAL, V$DATABASE VDB WHERE VAL.RESETLOGS_CHANGE# =
    VDB.RESETLOGS_CHANGE# GROUP BY THREAD# ORDER BY 1;
    
    SELECT THREAD#, max(SEQUENCE#) "Last Standby Seq Applied"
    FROM V$ARCHIVED_LOG VAL, V$DATABASE VDB WHERE VAL.RESETLOGS_CHANGE# =
    VDB.RESETLOGS_CHANGE# AND VAL.APPLIED IN ('YES','IN-MEMORY') GROUP BY
    THREAD# ORDER BY 1;
    

    以下输出中的序列号与针对备用数据库运行的先前查询相匹配:

       THREAD# Last Standby Seq Received
    ---------- -------------------------
             1                        40
             2                        33
    
       THREAD# Last Standby Seq Applied
    ---------- ------------------------
             1                       40
             2                       33
    
  5. 检查代管式恢复过程的状态是否为 APPLYING_LOG

    SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY WHERE PROCESS LIKE '%MRP%';
    

    以下示例展示了一个名为 MRP0 且状态为 APPLYING_LOG 的代管式恢复过程:

    PROCESS   STATUS
    --------- ------------
    MRP0      APPLYING_LOG
    
  6. 检查备用数据库上是否存在任何传输或应用延迟情况:

    COLUMN NAME FORMAT a20
    COLUMN VALUE FORMAT a30
    SELECT NAME, VALUE FROM V$DATAGUARD_STATS WHERE NAME LIKE '%lag%';
    

    以下输出表明备用数据库上没有延迟:

    NAME                 VALUE
    -------------------- ------------------------------
    transport lag        +00 00:00:00
    apply lag            +00 00:00:00
    

    如果存在延迟,请参阅 Oracle 的 Data Guard 问题排查文档

使用 Data Guard 代理切换数据库

切换是一种角色逆转,即主数据库成为备用数据库,反之亦然。在切换过程中,数据库客户端会与主数据库断开连接。切换可能会中断应用流量,具体取决于您的应用连接到数据库的方式。Oracle 提供了在角色转换期间保持应用连续性的选项。您可以按照以下说明执行数据库切换,以测试灾难恢复就绪情况:

  1. 登录托管主数据库的裸金属解决方案服务器。

  2. 启动 Data Guard 命令行界面并连接到备用数据库:

    dgmgrl
    
    CONNECT SYS@DBDG_SITE2
    
  3. 当系统提示您输入密码时,请输入数据库的 SYS 远程登录密码。

  4. 验证数据库是否已准备好进行切换。

    VALIDATE DATABASE DBDG_SITE2;
    

    成功结果将报告数据库已准备好切换。

  5. 如果成功,请执行切换命令:

    SWITCHOVER TO DBDG_SITE2;
    

    如果切换命令成功执行,您会收到一条消息,说明 DBDG_SITE2 现在是配置中的新主数据库。

  6. 运行以下命令以确认数据库角色已交换:

    SHOW CONFIGURATION;
    
  7. 运行以下命令以返回原始配置:

    SWITCHOVER TO DBDG_SITE1;
    

使用 Data Guard 代理进行数据库故障切换

故障切换是一种角色转换,在此过程中,如果站点服务完全中断,系统便会将其中一个备用数据库转换为主角色。在恢复备用数据库之前,重做不会传送到备用数据库。

执行故障切换

  1. 登录托管备用数据库的第一个裸金属解决方案服务器。

  2. 连接到 Data Guard 命令行界面,然后将主数据库故障切换到备用数据库:

    dgmgrl
    
    CONNECT SYS@DBDG_SITE2
    
  3. 当系统提示您输入密码时,请输入数据库的 SYS 远程登录密码。

  4. 启动故障转移:

    FAILOVER TO DBDG_SITE2
    

    运行 show configuration; 以验证 DBDG_SITE2 现在是否为主数据库,并且 DBDG_SITE1 需要进行恢复。

恢复主数据库

只有在启用 flashback database 的情况下,才能在故障切换后恢复主数据库。如需恢复失败的主数据库,请执行以下操作:

  1. 登录托管主数据库的第一个裸金属解决方案服务器。

  2. 连接到 Data Guard 命令行界面,登录主数据库,然后恢复失败的数据库:

    dgmgrl
    
    CONNECT SYS@DBDG_SITE2
    

    当系统提示您输入密码时,请输入数据库的 SYS 远程登录密码。

  3. 恢复数据库:

    REINSTATE DATABASE DBDG_SITE1;
    EXIT;
    

后续步骤

接下来,在 Compute Engine 上设置 Data Guard 观测器