test19

如何恢复删除并且commit后的数据

1、现象、问题描述

经常会发生误删除数据,并且commit了。恍然醒悟!
但如何恢复呢?Oracle 9以前的版本如果在你删除之前没有对数据库完整备份的话,想恢复删除的数据比登天还难。
Oracle9 以后提供了数据库闪回功能,可以将数据库恢复到之前的某个合适的时间点。
而且提供了flashback query 功能,可以查询某个表在某个时间点的状态,即使这个表中的数据已经删除,并且commit了。
这就是用flashback恢复误删除并且commit后数据的原理。
测试如下场景:
SQL> create table t as select OBJECT_ID,object_name from dba_objects where rownum < 5;
 
Table created.
 
Elapsed: 00:00:00.42
SQL> select object_id,substr(object_name,1,15) from t;
 
 OBJECT_ID SUBSTR(OBJECT_N
---------- ---------------
        20 ICOL$
        44 I_USER1
        28 CON$
        15 UNDO$
 
Elapsed: 00:00:00.00
现在将其全部删除,并且commit:
SQL> delete from t;
 
4 rows deleted.
 
Elapsed: 00:00:00.00
SQL> commit;
 
Commit complete.
 
Elapsed: 00:00:00.01
SQL> select * from t;
 
no rows selected
 
Elapsed: 00:00:00.00

现在用flashback操作将其恢复,方法如下:
SQL> insert into t select * from t as of timestamp (systimestamp - 2/24/60);
 
4 rows created.  
SQL> select object_id,substr(object_name,1,15) from t;
 
 OBJECT_ID SUBSTR(OBJECT_N
---------- ---------------
        20 ICOL$
        44 I_USER1
        28 CON$
        15 UNDO$
 
Elapsed: 00:00:00.00

但是,有个问题是:flashback利用的是回滚段机制,将脏(已经删除)数据从回滚段中重新读出。
而回滚段是可重复利用的,所以当经过了很多事务以后,可能存放需要的脏数据的回滚段被重复利用,这样flashback对此就不再奏效了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值