#全库闪回
全库闪回是指通过只回退对数据库对象进行的相关更改将数据回退到历史的某个时间点,无需执行传统的还原备份的恢复操作。功能表现类似于基于时间点恢复(PITR),但闪回更高效、操作更简洁,可满足更高要求的RPO和RTO。
SQL语句为FLASHBACK DATABASE TO ……,详细语法介绍请查阅FLASHBACK。
当YashanDB部署为容器数据库(配置参数ENABLE_PLUGGABLE_DATABASE=TRUE)时,根容器、各个PDB的闪回操作及其所依赖的闪回日志文件、还原点等均相互独立且私有。连接根容器执行闪回只会恢复根容器本身,不会对PDB产生影响。
# 依赖机制
全库闪回是通过闪回日志文件实现数据库恢复的。闪回日志文件以数据块为单元记录数据库修改前的信息,执行全库闪回等价于回滚闪回日志文件中的数据变更将整个数据库恢复到指定的时间点,通过使用日志和数据的增量变化来“倒退”至某个历史时间。
# 可恢复的数据范围
全库闪回仅对数据进行处理,不会回退数据库配置相关内容(例如主备角色、配置参数值等)。
全库闪回可以恢复大部分常规的数据更改,例如表、索引、视图、存储过程等数据库对象的增/删/改,但仍存在如下约束:
无法闪回文件类DDL,例如表空间DDL(CREATE/ALTER/DROP TABLESPACE)、数据文件DDL(ALTER DATABASE的database_file_clauses、double_write_file_clauses,ALTER TABLESPACE的datafile_clause)等。
无法闪回对归档日志文件和redo日志文件的操作,例如切换/归档redo日志文件、清理归档日志文件等。
无法闪回NOLOGGING表。
无法闪回因存储介质故障等原因引起的数据丢失,也无法闪回在操作系统层面误操作删除的数据文件。
闪回无法清理时间跨度期间内产生的LSC表冷数据物理文件,需要手动删除。
# 可恢复的时间跨度
理论上,全库闪回最早可以将数据库恢复到开启全库闪回功能的那一时刻,但实际还取决于以下因素,且真正能闪回到的最早SCN取决于下列SCN的最大值:
现存的可用闪回日志文件中存储的最早SCN或TIMESTAMP,可通过V$FLASHBACK_DATABASE_LOG视图获取。
最近1次执行如下表空间DDL的SCN或TIMESTAMP,可通过运行日志(run.log)获取TIMESTAMP。
CREATE TABLESPACE
ALTER TABLESPACE …… rename_clause
ALTER TABLESPACE OFFLINE|ONLINE
ALTER TABLESPACE …… ADD|DROP DATAFILE
最近1次执行如下文件类DDL的SCN或TIMESTAMP,可通过运行日志(run.log)获取TIMESTAMP。
- ALTER DATABASE DATAFILE …… RESIZE
当YashanDB部署为容器数据库(配置参数ENABLE_PLUGGABLE_DATABASE=TRUE)时,根容器只能闪回至最近1次执行PDB增/删DDL的SCN或TIMESTAMP,可通过运行日志(run.log)获取TIMESTAMP。
CREATE PLUGGABLE DATABASE
DROP PLUGGABLE DATABASE
某个PDB上执行的DROP DATABASE
Note:
若暂时无法获取上述SCN或TIMESTAMP的具体值,可直接根据需求执行闪回,若SCN超过允许闪回的范围,报错信息中会提示最早可闪回的SCN值。
# 主备部署中的闪回
在主备高可用部署中,全库闪回存在以下特征:
主备之间的全库闪回功能完全独立,以下内容/配置互不同步与干扰:
全库闪回功能开关配置
闪回日志
还原点
Note:
为简化管理,在将闪回功能规划为误操作回退方案时,建议在主库开启闪回、创建还原点后也同步在每个备库(逻辑备库除外)上手动执行相同操作。
物理备库的闪回功能及其特征如下:
开启全库闪回功能、创建还原点前,需先暂停redo日志回放(ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL)。若目标节点处于MOUNT阶段,此时回放并未启动,天然可直接执行此类操作。
执行闪回后,会自动暂停redo日志回放,需手动开启(ALTER DATABASE RECOVER MANAGED STANDBY DATABASE)。
执行闪回后,不会清理归档日志文件和redo日志文件。
逻辑备库的闪回功能及其特征如下:

