闪回查询、闪回表、闪回删除、闪回数据库
Oracle 闪回(Flashback)是核心的数据误操作恢复技术,主要分为 闪回查询、闪回表、闪回删除、闪回数据库 四类。下面按场景给出完整配置与操作步骤(以 11g/12c/19c 通用)。
一、基础配置(所有闪回功能依赖)
1. UNDO 表空间与保留时间(闪回查询/闪回表依赖)
-- 查看 undo 配置
show parameter undo;
-- 设置 undo 保留时间(秒,建议 86400=1天)
alter system set undo_retention=86400 scope=both;
-- 确保 undo 表空间足够(建议固定大小/自动扩展)
2. 回收站(闪回删除依赖)
-- 开启回收站(默认 ON)
alter system set recyclebin=ON scope=spfile;
-- 会话级临时开启
alter session set recyclebin=ON;
-- 查看状态
show parameter recyclebin;
3. 归档 + 闪回数据库(仅闪回数据库需要)
-- 1. 检查是否归档
select log_mode,flashback_on from v$database;
-- 2. 开启归档(mount 状态)
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
-- 3. 配置闪回恢复区
alter system set db_recovery_file_dest='+FRA' scope=spfile; -- 路径
alter system set db_recovery_file_dest_size=50G scope=spfile; -- 大小
alter system set db_flashback_retention_target=1440 scope=spfile;-- 分钟(1天)
-- 4. 开启闪回数据库(mount 状态)
shutdown immediate;
startup mount;
alter database flashback on;
alter database open;
-- 验证
select flashback_on from v$database;
二、闪回查询(Flashback Query)
用途:查看表过去某时间点/SCN的数据(不修改当前数据)。
1. 按时间戳查询
-- 查看 10 分钟前的数据
select * from emp as of timestamp systimestamp - interval '10' minute;
-- 按指定时间
select * from emp as of timestamp to_timestamp('2026-04-13 10:00:00','yyyy-mm-dd hh24:mi:ss');
2. 按 SCN 查询(更精确)
-- 获取当前 SCN
select current_scn from v$database;
-- 闪回查询
select * from emp as of scn 1234567;
3. 闪回版本查询(查看行多版本)
select versions_startscn, versions_endscn, versions_operation, empno, ename
from emp versions between scn 1234000 and 1234567;
三、闪回表(Flashback Table)
用途:将表回退到历史时间点/SCN(恢复 DML 误操作)。
前提
必须开启 行移动(ROW MOVEMENT)。
步骤
-- 1. 启用行移动(必须)
alter table emp enable row movement;
-- 2. 闪回表到 1 小时前
flashback table emp to timestamp systimestamp - interval '1' hour;
-- 3. 闪回表到指定 SCN
flashback table emp to scn 1234567;
-- 4. 验证
select * from emp;
四、闪回删除(Flashback Drop)
用途:恢复误 DROP 的表(从回收站)。
1. 查看回收站
-- 会话级
show recyclebin;
-- 数据字典
select original_name, object_name, droptime from user_recyclebin;
select * from dba_recyclebin;
2. 恢复表
-- 直接恢复原表名
flashback table emp to before drop;
-- 同名冲突时重命名
flashback table emp to before drop rename to emp_old;
-- 按回收站对象名恢复
flashback table "BIN$xxx==$0" to before drop;
3. 清理回收站
-- 清除单个表
purge table emp;
purge table "BIN$xxx==$0";
-- 清空当前用户回收站
purge recyclebin;
-- 清空所有用户回收站(DBA)
purge dba_recyclebin;
五、闪回数据库(Flashback Database)
用途:整库回退到历史点(整库误操作)。
步骤
-- 1. 数据库必须在 mount 状态
shutdown immediate;
startup mount;
-- 2. 闪回到指定时间
flashback database to timestamp to_timestamp('2026-04-13 09:00:00','yyyy-mm-dd hh24:mi:ss');
-- 或闪回到 SCN
flashback database to scn 1234567;
-- 3. 以 resetlogs 打开
alter database open resetlogs;
六、常用查询与限制
常用查询
-- 查看 undo 保留时间
show parameter undo_retention;
-- 查看闪回保留目标
show parameter db_flashback_retention_target;
-- 查看是否归档/闪回开启
select log_mode, flashback_on from v$database;
-- 查看回收站对象
select * from user_recyclebin;
限制
- SYS 用户表、SYSTEM 表空间表不支持闪回删除
- 闪回表不支持 物化视图、高级队列表
- 闪回数据库需要 归档 + 闪回日志
- 超过
undo_retention或闪回区满,历史数据会被覆盖
七、典型误操作恢复流程
-
误 DELETE/UPDATE 已提交
- 用 闪回查询 确认历史数据
- 用 闪回表 恢复(需
enable row movement)
-
误 DROP 表
- 查看回收站
- 闪回删除 恢复
-
整库误操作
- 立即停库,闪回数据库 到故障前
浙公网安备 33010602011771号