最近处理了个用户误删delete table 的故障,这里做了一个简单的汇总,文章内容整理自pub 里的各位大师的精粹,我这里偷个懒直接拿来用下。
基本处理思路:
1.如果还没有提交,用rollback。(应该不大可能。)
2.如果提交时间超过5分钟以上且小于undo_retention的设置,可以使用回闪功能。具体限制和操作可以参考:http://blog.itpub.net/post/468/15464
3.如果上述两条都不满足,可以使用logminer从redo中恢复,logminer的使用限制和描述可以参考:http://blog.itpub.net/post/468/13436
这里有一个使用logminer的简单的例子:http://blog.itpub.net/post/468/11764
4.如果这个日志已经重用且没有启用归档模式,那么你只能从备份中恢复了
2.使用闪回恢复表数据
2.1----flashback table
主要是是用undo 表空间的内容
注意:需要启用表的row movement
----格式化时间
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
SQL> select sysdate from dual;
SYSDATE
-------------------
2014-07-27 20:23:37
----enable row movement
Alter table xxx enable row movement:
----根据scn闪回表:
SQL> flashback table kel.t1 to scn 896744;
---根据时间点闪回表:
SQL> flashback table kel.t1 to timestamp to_timestamp('2014-07-28 00:18:00','yyyy-mm-dd hh24:mi:ss');
2.2----flashback query:
flashback query只能看到某一个时间点的对象的状态,而不能看到某个时间段内的状态变化。
select * from tb as of timestamp to_timestamp('2014-07-27 20:23:37','yyyy-mm-dd hh24:mi:ss');