Oracle误删数据后的神器:Flashback

本文详细介绍了Oracle数据库的闪回技术,包括闪回表、闪回查询和闪回Drop等功能,解释了如何通过不同的命令将表恢复到特定的时间点、SCN或撤销Drop操作,并探讨了闪回操作的限制和注意事项。

闪回表(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。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值