代码改变世界

Oracle数据反向恢复

2011-02-10 10:52  血糯米Otomii  阅读(272)  评论(0)    收藏  举报

1.Oracle 中truncate与delete的区别

truncate与delete都是用来清空一个数据表

truncate的删除的数据是不可恢复的,直接清除数据的储存空间,HWM设为初始值

delete的删除在没有重启电脑前删除的数据是可以回复的,delete相当于把数据扔入了回收站,但是空间仍旧预留

所以,在删除大数据量时使用truncate比delete效率要高得多

2.delete的数据恢复

先从flashback_transaction_query视图里查询,视图提供了供查询用的表名称,事务提交时间,UNDO_SQL等字段,如:select * from flashback_transaction_query where table_name='flashback_demo';

一般先根据时间进行查询,查询语句模式为select * from flashback_demo as of timestamp to_timestamp('2011/11/11 11:11:11','yyyy-mm-dd hh24:mi:ss');

若有数据,执行语句flashback table flashback_demo to timestamp to_timestamp('2011/11/11 11:11:11','yyyy-mm-dd hh24:mi:ss');

以上操作需要开启数据库的闪回功能,如果没有开启,则需要执行对flashback_transaction_query表中的UNDO_SQL字段进行拼接,并在commandWindow中进行手动恢复

执行语句select t.undo_sql from flashback_transaction_query t where t.start_timestamp =to_timestamp('2011/11/11 11:11:11','yyyy-mm-dd hh24:mi:ss');

把所有需要的数据复制到commandWindow中,F8,恢复成功