#全库闪回基础配置
全库闪回的基础配置主要包括功能启停、闪回日志文件管理。
存算一体分布式集群部署中无全库闪回功能。
# 开启全库闪回
全库闪回功能默认关闭,可以根据实际使用需求将其开启。
主备高可用部署时,主库与备库的开启全库闪回相互独立。通常所说的通过全库闪回恢复是指在主库上执行的全库闪回。备库闪回仅适用于备库在failover后单独执行过一段时间业务,需要重新闪回到failover前的时间点,重新与主库建立连接。
Note:
开启全库闪回会在一定程度上影响数据库写入性能(估计降低8%左右)。
开启全库闪回后会自动生成闪回日志文件,且闪回日志会随着数据库运行而增加,需要占用一定的磁盘空间。
若备库开启了闪回功能,在执行failover之前必须把所有的ARCHIVE_DEST_n、REQUIRED_SYNC_STANDBYS和REPLICATION_ADDR参数都置空。
# 前提条件
需确保数据库已开启归档模式。
执行相应操作的实例必须处于MOUNT或OPEN阶段。
在共享集群中,全库闪回相关操作只能在主实例(GV$INSTANCE视图的INSTANCE_ROLE = MASTER_ROLE)上执行。
执行相应操作的用户需至少具备SYSDBA角色或FLASHBACK相关权限。
# 操作步骤
以符合权限要求的用户连接并登录数据库。
$ 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>通过V$DATABASE视图的FLASHBACK_ON字段可以查看全局闪回功能是否已开启。
SELECT FLASHBACK_ON FROM V$DATABASE; FLASHBACK_ON ----------------- NOFLASHBACK_ON = NO表示暂未开启闪回,可按需执行后续操作将其开启。
FLASHBACK_ON = YES表示已开启闪回。
执行如下语句开启全库闪回。
ALTER DATABASE FLASHBACK ON;
# 查看全库闪回相关信息
通过V$DATABASE视图的FLASHBACK_ON字段可以查看全局闪回功能是否已开启。
SELECT FLASHBACK_ON FROM V$DATABASE; FLASHBACK_ON ----------------- NOFLASHBACK_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
闪回日志文件的自动清理默认流程如下:(下述介绍均以参数默认值为示例)
系统会定期判断现存所有闪回日志文件的总容量与DB_FLASHBACK_FILE_DEST_SIZE参数值的大小。
当现存所有闪回日志文件的总容量 ≥ 8G时,触发闪回日志文件自动清理任务。
系统会判断sequence最小的闪回日志文件是否满足清理策略:
若该文件满足早于永久还原点 + 最大保留时长要求(DB_FLASHBACK_RETENTION_TARGET参数),执行清理操作。
否则,不清理。打印运行日志提示空间不足,此时业务可能会卡住,需人工介入调大DB_FLASHBACK_FILE_DEST_SIZE参数的值。
判断/处理完1个文件后,系统会再次判断现存所有闪回日志文件的总容量与DB_FLASHBACK_FILE_DEST_SIZE参数值的大小。
若现存所有闪回日志文件的总容量仍大于8G时,按闪回日志文件的的序列号大小判断下一个文件是否可清理,依次重复。
直到现存所有闪回日志文件的总容量 ≤ 8G,停止闪回日志文件自动清理任务。
# 调整自动清理策略
以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>按需调整参数值,并指定生效范围。
-- 将自动清理闪回日志文件的触发条件设置为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相关权限。
# 操作步骤
以符合权限要求的用户连接并登录数据库。
$ 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>执行如下语句关闭全库闪回。
ALTER DATABASE FLASHBACK OFF;

