#闪回恢复数据库

闪回可以回退指定时间跨度期间内除数据文件外的几乎一切数据库操作

# 主库闪回

执行主库全库闪回需要将数据库启动/重启至MOUNT阶段,闪回完成后必须执行ALTER DATABASE OPEN RESETLOGS重置redo时间线。

# 前提条件

  • 确保已开启全库闪回功能,可通过查询V$DATABASE视图的FLASHBACK_ON字段确认是否开启。

  • 数据库处于MOUNT阶段时,仅允许sys用户登录。

  • 已确认闪回恢复至哪个时间点,并获取该时间点对应的SCN、时间戳或还原点信息:

    • 通过时间戳或SCN进行全库闪回时,可闪回恢复到的最早时间点获取方法可参考可恢复到的时间范围

    • 通过还原点进行全库闪回时,需先创建还原点并获取目标时间点对于的还原点名称。

# 操作步骤

# 步骤1:重启至MOUNT阶段

  1. 以安装用户登录目标节点所在服务器。

  2. 重启数据库(或实例)至MOUNT阶段。

    $ yasboot cluster restart -c yashandb -p sys_password -m mount
    
  3. 以sys用户登录数据库。

    $ yasql sys/********@192.168.1.2:1688
    YashanDB SQL Enterprise Edition Release {version_number} x86_64
    
    Connected to:
    YashanDB Server Enterprise Edition Release {version_number} x86_64 - Linux
    
    SQL> 
    
  4. 查看数据库状态。

    SELECT status FROM V$INSTANCE;
    
    STATUS
    -------------
    MOUNTED
    

# 步骤2:执行全库闪回

根据目标时间点相关信息执行全库闪回:

-- 场景1:基于还原点闪回
FLASHBACK DATABASE TO RESTORE POINT G20241201_01;

-- 场景2:基于SCN闪回
FLASHBACK DATABASE TO SCN 725539138356854784;

-- 场景3:基于时间戳闪回
FLASHBACK DATABASE TO TIME '2025-08-12 11:58:05.847545';

# 步骤3:启动数据库

启动数据库至OPEN,并重置redo时间线。

ALTER DATABASE OPEN RESETLOGS;

至此,闪回恢复执行完成,可查看数据变化验证恢复结果。

# 备库闪回

备库闪回只能用于主备业务模拟演练,例如在业务闲暇时提前使用备库模拟演练后续的重要业务(不会影响主库的正常使用),提前识别风险,演练完成后再将备库闪回至演练前。

Note:

在主备集群部署中,“备库”延申为“备集群”。

# 单机备库闪回

# 步骤1:选定并准备目标备库

  1. 以DBA用户连接并登录数据库。

    $ yasql sales/********@192.168.1.2:1688
    YashanDB SQL Enterprise Edition Release {version_number} x86_64
    
    Connected to:
    YashanDB Server Enterprise Edition Release {version_number} x86_64 - Linux
    
    SQL> 
    
  2. 查看数据库的保护模式和主备链路配置等信息。

    -- 查看ARCHIVE_DEST_n配置
    SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME LIKE 'ARCHIVE_DEST_%' AND VALUE IS NOT NULL;
    
    NAME                                                             VALUE                                                  
    ---------------------------------------------------------------- ----------------------------------------------------------------
    ARCHIVE_DEST_2                                                   SERVICE=192.168.1.3:1688 NODE_ID=1-2:2
    ARCHIVE_DEST_3                                                   SERVICE=192.168.1.4:1688 NODE_ID=1-3:3
    
    -- 查看保护模式
    SELECT PROTECTION_MODE,PROTECTION_LEVEL FROM V$DATABASE;
    PROTECTION_MODE                                                  PROTECTION_LEVEL                                       
    ---------------------------------------------------------------- ----------------------------------------------------------------
    MAXIMUM PROTECTION                                               MAXIMUM PROTECTION
    
    -- 若保护模式为MAXIMUM PROTECTION,还需查看同步备
    SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME = 'REQUIRED_SYNC_STANDBYS' OR NAME = 'QUORUM_SYNC_STANDBYS';
    
    NAME                                                             VALUE
    ---------------------------------------------------------------- ----------------------------------------------------------------
    QUORUM_SYNC_STANDBYS                                             MAJORITY
    REQUIRED_SYNC_STANDBYS
    

    根据配置信息选择执行业务演练的操作节点(本文以备库1-3为例),建议选择未被明确定义为同步备的备库节点,以简化操作。另外,请记录上述配置信息,执行完演练操作后还需还原相应配置。

  3. 在主库上执行以下操作,临时解除主库与目标备库的关联。

    1. )根据去掉目标备库1-3后的主备规模调整保护模式和同步备配置。

      • 仅剩主库,则改为最大性能。
      ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
      
      • 还剩1主1备,则改为最大可用。
      ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;
      
      • 还剩1主多备,则无需调整保护模式,但需确保备库1-3未被明确指定为同步备,否则还需对应修改QUORUM_SYNC_STANDBYS或REQUIRED_SYNC_STANDBYS参数。
    2. )置空备库1-3对应的ARCHIVE_DEST_n参数。

      ALTER SYSTEM SET ARCHIVE_DEST_3 ='' SCOPE=BOTH;
      
  4. 以DBA用户连接并登录目标节点。

    $ yasql sales/********@192.168.1.4:1688
    YashanDB SQL Enterprise Edition Release {version_number} x86_64
    
    Connected to:
    YashanDB Server Enterprise Edition Release {version_number} x86_64 - Linux
    
    SQL> 
    
  5. 查看REPLICATION_ADDR、ARCHIVE_DEST_n和REQUIRED_SYNC_STANDBYS参数配置并记录参数值,再将这些参数全部置空。

    -- REPLICATION_ADDR
    SHOW PARAMETER REPLICATION_ADDR;
    ALTER SYSTEM SET REPLICATION_ADDR ='' SCOPE=SPFILE;
    
    -- ARCHIVE_DEST_n
    SELECT name,value FROM V$PARAMETER WHERE ( NAME LIKE 'ARCHIVE_DEST_%' ) AND ( value IS NOT NULL );
    -- 根据查询结果依次清空所有ARCHIVE_DEST_n的值
    ALTER SYSTEM SET ARCHIVE_DEST_1 ='' SCOPE=BOTH;
    ALTER SYSTEM SET ARCHIVE_DEST_2 ='' SCOPE=BOTH;
    ……
    
    -- REQUIRED_SYNC_STANDBYS
    SHOW PARAMETER REQUIRED_SYNC_STANDBYS;
    -- 若参数值不为空则置空
    ALTER SYSTEM SET REQUIRED_SYNC_STANDBYS ='' SCOPE=BOTH;
    

    此时,该节点等同于一个独立的单库。

# 步骤2:目标备库完成闪回基础配置

  1. 以安装用户登录目标节点所在服务器。

  2. 重启目标节点至MOUNT阶段。

    $ yasboot node restart -c yashandb -n 1-3 -p sys_password -m mount
    
  3. 以sys用户连接并登录目标节点。

    $ yasql sys/********@192.168.1.4:1688
    YashanDB SQL Enterprise Edition Release {version_number} x86_64
    
    Connected to:
    YashanDB Server Enterprise Edition Release {version_number} x86_64 - Linux
    
    SQL> 
    
  4. 开启全库闪回功能。

    ALTER DATABASE FLASHBACK ON;
    
  5. 创建永久还原点。

    CREATE RESTORE POINT G202501011000 AS OF TIMESTAMP SYSTIMESTAMP() GUARANTEE FLASHBACK DATABASE;
    
  6. 启动目标节点至OPEN阶段。

    ALTER DATABASE OPEN;
    
  7. 目标节点执行failover。

    ALTER DATABASE FAILOVER;
    

# 步骤3:执行演练业务

在目标备库上,执行相应的演练业务。

# 步骤4:闪回备库

  1. 以安装用户登录目标节点所在服务器。

  2. 重启目标节点至MOUNT阶段。

    $ yasboot node restart -c yashandb -n 1-3 -p sys_password -m mount
    
  3. 以sys用户连接并登录目标节点。

    $ yasql sys/********@192.168.1.4:1688
    YashanDB SQL Enterprise Edition Release {version_number} x86_64
    
    Connected to:
    YashanDB Server Enterprise Edition Release {version_number} x86_64 - Linux
    
    SQL> 
    
  4. 闪回至上述还原点。

    FLASHBACK DATABASE TO RESTORE POINT G202501011000;
    

# 步骤5:还原高可用环境配置

  1. 重启目标节点至NOMOUNT阶段。

    $ yasboot node restart -c yashandb -n 1-3 -p sys_password -m nomount
    
  2. 还原备库1-3上的REPLICATION_ADDR、ARCHIVE_DEST_n和REQUIRED_SYNC_STANDBYS参数参数配置。

  3. 以DBA用户登录主库,并还原主库上的ARCHIVE_DEST_n、保护模式或同步备相关配置。

  4. 正常启动备库1-3。

    此时主备库会自动进行数据同步。

# 备集群闪回

# 步骤1:选定并准备目标备集群

  1. 以DBA用户连接并登录数据库。

    $ yasql sales/********@192.168.1.2:1688
    YashanDB SQL Enterprise Edition Release {version_number} x86_64
    
    Connected to:
    YashanDB Server Enterprise Edition Release {version_number} x86_64 - Linux
    
    SQL> 
    
  2. 查看数据库的保护模式和主备链路配置等信息。

    -- 查看ARCHIVE_DEST_n配置
    SELECT INST_ID,NAME,VALUE FROM GV$PARAMETER WHERE NAME LIKE 'ARCHIVE_DEST_%' AND VALUE IS NOT NULL;
    
        INST_ID NAME                                                             VALUE
    ----------- ---------------------------------------------------------------- ----------------------------------------------------------------
              1 ARCHIVE_DEST_2                                                   SERVICE=192.168.10.4:1688,192.168.10.5:1688 NODE_ID=2-1:1
              2 ARCHIVE_DEST_2                                                   SERVICE=192.168.10.4:1688,192.168.10.5:1688 NODE_ID=2-1:1
    
    -- 查看保护模式
    SELECT INST_ID,PROTECTION_MODE,PROTECTION_LEVEL FROM GV$DATABASE;
    
        INST_ID PROTECTION_MODE                                                  PROTECTION_LEVEL
    ----------- ---------------------------------------------------------------- ----------------------------------------------------------------
              1 MAXIMUM PERFORMANCE                                              MAXIMUM PERFORMANCE
              2 MAXIMUM PERFORMANCE                                              MAXIMUM PERFORMANCE
    
    -- 若保护模式为MAXIMUM PROTECTION,还需查看同步备
    SHOW PARAMETER REQUIRED_SYNC_STANDBYS;
    

    根据配置信息选择执行业务演练的操作备集群,建议选择未被明确定义为同步备的备库节点,以简化操作。另外,请记录上述配置信息,执行完演练操作后还需还原相应配置。

  3. 在主集群上执行以下操作,临时解除主集群与目标备集群所有节点的关联。

    -- 置空目标备集群对应的ARCHIVE_DEST_n参数
    ALTER SYSTEM SET ARCHIVE_DEST_3 ='' SCOPE=BOTH;
    
    -- 若目标备集群被明确指定为同步备,还需对应修改REQUIRED_SYNC_STANDBYS参数
    
  4. 以DBA用户连接并登录目标集群的某个实例。

    $ yasql sales/********@192.168.10.4:1688
    YashanDB SQL Enterprise Edition Release {version_number} x86_64
    
    Connected to:
    YashanDB Server Enterprise Edition Release {version_number} x86_64 - Linux
    
    SQL> 
    
  5. 查看REPLICATION_ADDR、ARCHIVE_DEST_n和REQUIRED_SYNC_STANDBYS参数配置并记录参数值,再将这些参数全部置空。

    -- REPLICATION_ADDR
    SHOW PARAMETER REPLICATION_ADDR;
    ALTER SYSTEM SET REPLICATION_ADDR ='' SCOPE=SPFILE;
    
    -- ARCHIVE_DEST_n
    SELECT name,value FROM V$PARAMETER WHERE ( NAME LIKE 'ARCHIVE_DEST_%' ) AND ( value IS NOT NULL );
    -- 根据查询结果依次清空所有ARCHIVE_DEST_n的值
    ALTER SYSTEM SET ARCHIVE_DEST_2 ='' SCOPE=BOTH;
    ……
    
    -- REQUIRED_SYNC_STANDBYS
    SHOW PARAMETER REQUIRED_SYNC_STANDBYS;
    -- 若参数值不为空则置空
    ALTER SYSTEM SET REQUIRED_SYNC_STANDBYS ='' SCOPE=BOTH;
    
  6. 依次登录该集群的其他实例,重复上述操作清空相应参数。

    此时,该集群等同于一个独立的单集群。

# 步骤2:目标备集群完成闪回基础配置

  1. 以安装用户登录目标集群的1号实例所在服务器。

  2. 重启目标集群至MOUNT阶段。

    有1个实例处于MOUNT阶段即可,其他实例均处于关闭状态。

    # 关闭目标集群的所有实例
    $ yasboot node stop -c yashandb -n 2-1 -p sys_password
    $ yasboot node stop -c yashandb -n 2-2 -p sys_password
    
    # 启动其中1个实例至NOMOUNT阶段
    $ yasboot node start -c yashandb -n 2-1 -p sys_password -m nomount
    
    # 以sys用户登录当前实例
    $ yasql sys/********@192.168.10.4:1688
    YashanDB SQL Enterprise Edition Release {version_number} x86_64
    
    Connected to:
    YashanDB Server Enterprise Edition Release {version_number} x86_64 - Linux
    
    SQL> 
    
    -- 启动实例至MOUNT阶段
    SQL> ALTER DATABASE MOUNT;
    
  3. 开启全库闪回功能。

    ALTER DATABASE FLASHBACK ON;
    
  4. 创建永久还原点。

    CREATE RESTORE POINT G202501011000 AS OF TIMESTAMP SYSTIMESTAMP() GUARANTEE FLASHBACK DATABASE;
    
  5. 启动当前实例至OPEN阶段。

    ALTER DATABASE OPEN;
    
  6. 目标集群执行failover。

    ALTER DATABASE FAILOVER;
    exit
    
  7. 启动目标集群的其他实例。

    $ yasboot node start -c yashandb -n 2-2 -p sys_password
    

# 步骤3:执行演练业务

在目标集群上,执行相应的演练业务。

# 步骤4:闪回备集群

  1. 以安装用户登录目标节点所在服务器。

  2. 重启目标集群至MOUNT阶段。

    有1个实例处于MOUNT阶段即可,其他实例均处于关闭状态。

    # 关闭目标集群的所有实例
    $ yasboot node stop -c yashandb -n 2-1 -p sys_password
    $ yasboot node stop -c yashandb -n 2-2 -p sys_password
    
    # 启动其中1个实例至NOMOUNT阶段
    $ yasboot node start -c yashandb -n 2-1 -p sys_password -m nomount
    
    # 以sys用户登录当前实例
    $ yasql sys/********@192.168.10.4:1688
    YashanDB SQL Enterprise Edition Release {version_number} x86_64
    
    Connected to:
    YashanDB Server Enterprise Edition Release {version_number} x86_64 - Linux
    
    SQL> 
    
    -- 启动实例至MOUNT阶段
    SQL> ALTER DATABASE MOUNT;
    
  3. 闪回至上述还原点。

    FLASHBACK DATABASE TO RESTORE POINT G202501011000;
    

# 步骤5:还原高可用环境配置

  1. 重启当前实例至NOMOUNT阶段。

    -- 退出yasql
    
    # 重启当前实例至NOMOUNT阶段
    $ yasboot node restart -c yashandb -n 2-1 -p sys_password -m nomount
    
  2. 还原当前实例上的ARCHIVE_DEST_n、REQUIRED_SYNC_STANDBYS和REPLICATION_ADDR参数配置。

  3. 依次启动目标集群中其他实例至NOMOUNT阶段,并还原其ARCHIVE_DEST_n、REQUIRED_SYNC_STANDBYS和REPLICATION_ADDR参数配置。

  4. 以DBA用户登录主集群各个实例,并还原主集群上的ARCHIVE_DEST_n、REQUIRED_SYNC_STANDBYS配置。

  5. 正常启动备集群的所有实例。

    此时主备集群会自动进行数据同步。

edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流