一次用闪回表恢复数据

现场开发人员报告误删了生产库一个表全部数据,是生产数据,负任重大,需要恢复。幸好用的是delete,恢复数据还是比较容易。
 
SQL> select count(*) from t1;
 
  COUNT(*)
----------
  0

 

记录全被删除了。
 
数据库版本是10g,数据有大约上万条,首先用flashback version query试试:
 
SQL> select *
      from t1 versions
         between timestamp to_timestamp('2011-5-9 13:00:00','yyyy-mm-dd hh24:mi:ss')
         and to_timestamp('2011-5-9 13:10:00','yyyy-mm-dd hh24:mi:ss');
      from t1 versions
           *
ERROR at line 2:
ORA-30052: invalid lower limit snapshot expression
 
看来时间超过限制。
想过用日志挖掘,但这么多的数据undo sql也不少,如何抽丝剥茧也是一大难题。看看闪回查询(flashback query):
 
SQL> select count(*) from t1 as of timestamp to_timestamp('2011-5-9 13:00:00','yyyy-mm-dd hh24:mi:ss');
 
  COUNT(*)
----------
     90014
 
和开发人员确认和被删之前记录数相符,干脆用闪回表方法恢复,不用中间表,开启表上的行迁移:
SQL> Alter table t1 enable row movement;
Table altered.
 
闪回:
SQL> flashback table t1 to timestamp to_timestamp('2011-5-9 13:00:00','yyyy-mm-dd hh24:mi:ss');
Flashback complete.
 
SQL> select count(*) from t1;
  COUNT(*)
----------
     90014
 
数据已经恢复
 
取消行迁移:
SQL> Alter table t1 disable row movement;
Table altered.
 
需要注意的一点flashback table的一些限制:
1)启用行移动  alter table  table_name  enable row movement;
2)不能用于闪回系统表、远程表、外部表;
3)不能跨越DDL语句,即闪回期间如果发生了DDL,则闪回失败
4)9i只能闪回5分钟内的数据,10g有所增强,可以延长到5天,只要undo没有被覆盖
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值