flashback table快速恢复误删除的数据

2014-11-24 18:33:13 · 作者: · 浏览: 0

从oracle 9i、10g开始,你可以不必去用备份来恢复了。有一种快速恢复方法,称之为flashback。你可以flashback query,也可以flashback table。


一、FLASHBACK QUERY


适应范围:表中的数据持续变化,需要看到某个时间点错误删除修改了某些记录,可以根据这些记录再进行数据恢复。


--闪回到15分钟前


select * from orders as of timestamp (systimestamp - interval '15' minute) where ......


这里可以使用DAY、SECOND、MONTH替换minute,例如:


SELECT * FROM orders AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '2' DAY)


--闪回到某个时间点


select * from orders as of timestamp to_timestamp ('01-Sep-04 16:18:57.845993', 'DD-Mon-RR HH24:MI:SS.FF') where ...


--闪回到两天前


select * from orders as of timestamp (sysdate - 2) where.........


二、FLASHBACK TABLE


1、表已经drop掉之后使用,可以快速恢复。


flashback table orders to before drop;


如果drop的表已经重新建立了一个同名称的表,那么需要加上rename to子句。


flashback table order to before drop rename to order_old_version;


2、表的数据错误删除或修改后,没有后续数据变化,可以快速恢复。


第一步,首先要启用行迁移


alter table order enable row movement;


第二步,闪回表


到15分钟前:


flashback table order to timestamp systimestamp - interval '15' minute;


到某个时间点:


FLASHBACK TABLE order TO TIMESTAMP TO_TIMESTAMP('2007-09-12 01:15:25 PM','YYYY-MM-DD HH:MI:SS AM')