在Oracle數據庫操作中,經常會有不小心誤刪除數據、drop表的情況出現。以前,這種情況發生后,開發人員通常會去求助DBA或管理者,使用數據庫備份恢復去找回這些數據。 從Oracle 9i、10g開始,你可以不必去用備份來恢復了。有一種快速恢復方法,稱之為flashbac
在Oracle數據庫操作中,經常會有不小心誤刪除數據、drop表的情況出現。以前,這種情況發生后,開發人員通常會去求助DBA或管理者,使用數據庫備份恢復去找回這些數據。
從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’)