#全库闪回
全库闪回是指通过只回退对数据库对象进行的相关更改将数据回退到历史的某个时间点,无需执行传统的还原备份的恢复操作。功能表现类似于基于时间点恢复(PITR),但闪回更高效、操作更简洁,可满足更高要求的RPO和RTO。
SQL语句为FLASHBACK DATABASE TO ……,详细语法介绍请查阅FLASHBACK。
# 依赖机制
全库闪回是通过闪回日志文件实现数据库恢复的。闪回日志文件以数据块为单元记录数据库修改前的信息,执行全库闪回等价于回滚闪回日志文件中的数据变更将整个数据库恢复到指定的时间点,通过使用日志和数据的增量变化来“倒退”至某个历史时间。
# 可恢复的数据范围
全库闪回可以恢复大部分常规更改,例如表、索引、视图、存储过程等数据库对象的增/删/改,但仍存在如下约束:
无法闪回文件类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
Note:
若暂时无法获取上述SCN或TIMESTAMP的具体值,可直接根据需求执行闪回,若SCN超过允许闪回的范围,报错信息中会提示最早可闪回的SCN值。

