Orcale利用閃回功能恢復資料

WSH_AI發表於2018-04-14

從9i開始,Oracle提供了閃回(FLASHBACK)功能。使用FLASHBACK TABLE語句從撤消段中(undo segment)讀取該表的過去映像,並利用Oracle9i中引入的回閃查詢重建錶行。UNDO_RETENTION給出了閃回支援的最小時間。也就是說,FLASHBACK最少可以支援UNDO_RETENTION給出的時間,如果系統比較閒,則可以閃回更長的時間。(當然,如果回滾表空間的空間分配不足,當系統處於忙時,有可能重用還沒有達到UNDO_RETENTION時間限制的資料的空間)。使用閃回的一個前提是表不能進行DDL操作。不但不能對DDL操作進行回閃,而且,也無法閃回到DDL操作以前的資料了。

一.delete誤刪

方法1:如果表結構沒有改變,直接閃回整個表,具體步驟:

--首先需要表閃回許可權,開啟行移動功能

alter table 表名 enable row movement;

--執行閃回恢復表資料到某個時間點

flashback table 表名 to timestamp to_timestamp(‘恢復的時間點','yyyy-mm-dd hh24:mi:ss');

--關閉行移動功能

alter table 表名 disable row movement;

方法2:查詢被刪除資料,再執行insert

insert into 表名 (select * from 表名 as of timestamp to_timestamp('恢復的時間點','yyyy-mm-dd hh24:mi:ss'));

二.drop誤刪 

原理:由於oracle在刪除表時,沒有直接清空表所佔的塊,oracle把這些已刪除的表的資訊放到了一個虛擬容器“回收站”中,而只是對該表的資料塊做了可以被覆寫的標誌,所以在塊未被重新使用前還可以恢復。

1.如果記得被刪的表名,直接閃回

flashback table 原表名 to before drop;

2.不記的表明,先從“回收站”找到唄刪除的表,再執行恢復:

-- 查詢被刪除的表,table_name或者object_name就是刪除後在回收站中被重新命名的表名

select table_name,dropped from user_tables;

select object_name,original_name,type,droptime from user_recyclebin;

-- 執行恢復

flashback table "回收站中的表名" to before drop rename to 新表名;

三.閃回整個資料庫

alter database flashback on;

flashback database to scn SCNNO;

flashback database to timestamp to_timestamp('恢復的時間點','yyyy-mm-dd hh24:mi:ss');

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31530407/viewspace-2152933/,如需轉載,請註明出處,否則將追究法律責任。

相關文章