闪回表(Flashback Table)
- 闪回到具体时间
flashback table 表名 to timestamp to_timestamp('2019-03-07 09:00:00','yyyy-mm-dd hh24:mi:ss');
- 闪回到两个小时之前
flashback table 表名 to timestamp(systimestamp-interval '120' minute);
- 将表闪回到指定SCN的时候
flashback table 表名 to scn 值;
- 如果多张表互相依赖或者有外键时可以同时闪回
flashback table 表1,表2,... to scn 值;
闪回表是利用UNDO表空间的撤销数据,所以能把表闪回到多久之前受到undo_retention(Oracle Undo过期数据的保存期限),UNDO表空间的数据文件是否启动自动增长功能,是否设置guarantee等三种因素的影响。
注意事项:
- 被闪回的表必须启用行移动功能(alter table 表名 enable row movement;)
- FLASHBACK TABLE命令的执行者必须有FLASHBACK ANY TABLE系统权限或者在被闪回的表上具有FLASHBACK对象权限
- FLASHBACK TABLE属于DDL命令,隐式提交。
- SYS用户的任何表无法使用此功能。
如果不小心把表都删掉了的话:
Flashback Drop
Flashback Drop指的是撤销DROP TABLE的效果。
- 闪回表
flashback table 表名 to before drop;
- 闪回表并重命名
flashback table 表名1 to before drop rename to 表名2;
闪回查询(Flashback Query)
以表为单位查询过去的数据称为闪回查询,主要有两种方式:1. 闪回时间点查询。利用select命令的“as of”子句。2. 闪回版本查询。利用select命令的“versions between”子句在过去的一段时间范围内的查询。
select * from 表名 as of timestamp 时间戳 where 查询条件;
闪回版本查询
select *,versions_xid,versions_startscn,versions_endscn,
from 表名
versions between 时间戳 and maxvalue
where 查询条件
order by 2 nulls first;
versions_xid为事务号,versions_startscn和versions_endscn分别是事务开始时的SCN和修改该行的下一个事务开始时的SCN。
本文详细介绍了Oracle数据库的闪回技术,包括闪回表、闪回查询和闪回Drop等功能,解释了如何通过不同的命令将表恢复到特定的时间点、SCN或撤销Drop操作,并探讨了闪回操作的限制和注意事项。
1万+

被折叠的 条评论
为什么被折叠?



