#全库闪回基础配置

全库闪回的基础配置主要包括功能启停、闪回日志文件管理。

存算一体分布式集群部署中无全库闪回功能。

# 开启全库闪回

全库闪回功能默认关闭,可以根据实际使用需求将其开启。

主备高可用部署时,主库与备库的开启全库闪回相互独立。通常所说的通过全库闪回恢复是指在主库上执行的全库闪回。备库闪回仅适用于备库在failover后单独执行过一段时间业务,需要重新闪回到failover前的时间点,重新与主库建立连接。

Note:

  • 开启全库闪回会在一定程度上影响数据库写入性能(估计降低8%左右)。

  • 开启全库闪回后会自动生成闪回日志文件,且闪回日志会随着数据库运行而增加,需要占用一定的磁盘空间。

  • 若备库开启了闪回功能,在执行failover之前必须把所有的ARCHIVE_DEST_n、REQUIRED_SYNC_STANDBYS和REPLICATION_ADDR参数都置空。

# 前提条件

  • 需确保数据库已开启归档模式

  • 执行相应操作的实例必须处于MOUNT或OPEN阶段。

  • 在共享集群中,全库闪回相关操作只能在主实例(GV$INSTANCE视图的INSTANCE_ROLE = MASTER_ROLE)上执行。

  • 执行相应操作的用户需至少具备SYSDBA角色或FLASHBACK相关权限。

# 操作步骤

  1. 以符合权限要求的用户连接并登录数据库。

    $ 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. 通过V$DATABASE视图的FLASHBACK_ON字段可以查看全局闪回功能是否已开启。

    SELECT FLASHBACK_ON FROM V$DATABASE;
    
    FLASHBACK_ON
    -----------------
    NO
    
    • FLASHBACK_ON = NO表示暂未开启闪回,可按需执行后续操作将其开启。

    • FLASHBACK_ON = YES表示已开启闪回。

  3. 执行如下语句开启全库闪回。

    ALTER DATABASE FLASHBACK ON;
    

# 查看全库闪回相关信息

  • 通过V$DATABASE视图的FLASHBACK_ON字段可以查看全局闪回功能是否已开启。

    SELECT FLASHBACK_ON FROM V$DATABASE;
    
    FLASHBACK_ON
    -----------------
    NO
    
    • FLASHBACK_ON = NO表示暂未开启闪回,可按需执行后续操作将其开启。

    • FLASHBACK_ON = YES表示已开启闪回。

  • 通过GV$FLASHBACK_DATABASE_LOG/V$FLASHBACK_DATABASE_LOG视图可以查看全库闪回的相关信息,例如全库闪回能到达的最老时间点对应的SCN、当前全库闪回所有日志文件所占空间等。

    SELECT * FROM V$FLASHBACK_DATABASE_LOG;
    
    OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TIME                                                 RETENTION_TARGET       TOTAL_FILE_SIZE
    --------------------- ---------------------------------------------------------------- --------------------- ---------------------
    723859443785293824 2025-08-07 17:51:37.017894                                                        1440            1224210944
    

# 管理闪回日志文件

开启全库闪回功能后,会自动生成闪回日志文件。

# 查看闪回日志文件

# 查看物理文件

闪回日志文件的存放路径默认为$YASDB_DATA/fra。

使用安装用户登录数据库所在服务器,进入该路径即可查看对应的物理文件。

$ cd $YASDB_DATA/fra
$ ls -lrt
total 1457608
-rw-r----- 1 seyashan seyashan 1074827264 Aug 11 02:00 flb_file_0
-rw-r----- 1 seyashan seyashan  140962304 Aug 11 16:06 flb_file_1
-rw-r----- 1 seyashan seyashan    8421376 Aug 11 16:06 flb_ctrl

闪回日志文件包括flb_ctrl和flb_file_{sequence}:

  • flb_ctrl:闪回控制文件。

  • flb_file_{sequence}:具体的闪回日志文件,{sequence}为文件序列号,从0开始递增。

# 通过视图查看

通过V$FLASHBACK_DATABASE_LOGFILE视图可以查看闪回日志文件的信息,例如文件名、文件所占空间大小、文件被创建时对应的SCN等。

SELECT * FROM V$FLASHBACK_DATABASE_LOGFILE;

FILE_NAME                                        FILE_NUM THREAD#    SEQUENCE#             FILE_SIZE         FIRST_CHANGE# FIRST_TIME
-------------------------------------------- ------------ ------- ------------ --------------------- --------------------- -----------------------------
$YASDB_DATA/fra/flb_file_0                             0       0            0            1074827264    723743061460926464 2025-08-07 17:58:03.364484
$YASDB_DATA/fra/flb_file_1                             1       0            1             141250048    724923208865271808 2025-08-11 02:00:05.289373

# 管理闪回日志自动清理策略

YashanDB提供了闪回日志文件的自动清理策略,包括闪回日志文件的清理策略和自动清理任务的启停触发条件。

如果YashanDB默认的自动清理策略无法满足实际需求,只能自定义修改相关参数值,不得手动删除任一物理文件

自动清理闪回日志时,始终只会清理早于永久还原点的文件。

# 清理策略

闪回日志文件的清理策略取决于以下参数:

参数名称 参数描述 默认值
DB_FLASHBACK_FILE_DEST_SIZE 允许闪回日志文件能占据的最大空间,单位为字节。
同时将作为闪回日志文件清理任务的启停条件。
8G
DB_FLASHBACK_RETENTION_TARGET 闪回日志文件的最大保留时长,单位为分钟。
同时将作为闪回日志文件的清理策略(即是否允许被清理)。
1440

查看清理策略相关参数值:

SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME LIKE 'DB_FLASHBACK_%';

NAME                                                             VALUE                                        
---------------------------------------------------------------- ----------------------------------------------------------------
DB_FLASHBACK_RETENTION_TARGET                                    1440                                         
DB_FLASHBACK_FILE_DEST_SIZE                                      8G

闪回日志文件的自动清理默认流程如下:(下述介绍均以参数默认值为示例)

  1. 系统会定期判断现存所有闪回日志文件的总容量与DB_FLASHBACK_FILE_DEST_SIZE参数值的大小。

  2. 当现存所有闪回日志文件的总容量 ≥ 8G时,触发闪回日志文件自动清理任务。

  3. 系统会判断sequence最小的闪回日志文件是否满足清理策略:

    • 若该文件满足早于永久还原点 + 最大保留时长要求(DB_FLASHBACK_RETENTION_TARGET参数),执行清理操作。

    • 否则,不清理。打印运行日志提示空间不足,此时业务可能会卡住,需人工介入调大DB_FLASHBACK_FILE_DEST_SIZE参数的值。

  4. 判断/处理完1个文件后,系统会再次判断现存所有闪回日志文件的总容量与DB_FLASHBACK_FILE_DEST_SIZE参数值的大小。

    若现存所有闪回日志文件的总容量仍大于8G时,按闪回日志文件的的序列号大小判断下一个文件是否可清理,依次重复。

  5. 直到现存所有闪回日志文件的总容量 ≤ 8G,停止闪回日志文件自动清理任务。

# 调整自动清理策略

  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. 按需调整参数值,并指定生效范围。

    -- 将自动清理闪回日志文件的触发条件设置为16G
    ALTER SYSTEM SET DB_FLASHBACK_FILE_DEST_SIZE = 16G SCOPE=BOTH;
    
    SHOW PARAMETER DB_FLASHBACK_FILE_DEST_SIZE
    
    NAME                                                             VALUE                                        
    ---------------------------------------------------------------- ----------------------------------------------------------------
    DB_FLASHBACK_FILE_DEST_SIZE                                      16G
    
    -- 将闪回日志文件的最大保留时长设置为7天,即10080分钟
    ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET = 10080 SCOPE=BOTH;
    
    SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME LIKE 'DB_FLASHBACK_%';
    
    NAME                                                             VALUE                                        
    ---------------------------------------------------------------- ----------------------------------------------------------------
    DB_FLASHBACK_RETENTION_TARGET                                    10080                                         
    DB_FLASHBACK_FILE_DEST_SIZE                                      16G
    

# 备份与恢复闪回日志文件

通过备份整个数据库实现对闪回日志文件的备份,具体操作请查阅备份恢复

# 关闭全库闪回

若确认无需再使用全库闪回功能,可将其关闭,还原数据库性能。

关闭全库闪回时,会自动删除/清空以下信息:

  • 闪回日志文件,但不会删除fra文件夹。

  • 所有非永久的普通还原点。

  • 闪回相关的视图数据,包括GV$FLASHBACK_DATABASE_LOG/V$FLASHBACK_DATABASE_LOG、GV$FLASHBACK_DATABASE_LOGFILE/V$FLASHBACK_DATABASE_LOGFILE。

# 前提条件

  • 若存在永久还原点将无法直接关闭全库闪回功能,需先手动将其删除。

  • 执行相应操作的实例必须处于MOUNT或OPEN阶段。

  • 执行相应操作的用户需至少具备SYSDBA角色或FLASHBACK相关权限。

# 操作步骤

  1. 以符合权限要求的用户连接并登录数据库。

    $ 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. 执行如下语句关闭全库闪回。

    ALTER DATABASE FLASHBACK OFF;
    
edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流