Oracle在9i版本的時候引入了閃回技術,在Oracle 10g已經全面提供了閃回功能,主要提供了快速簡單恢復數據庫誤操作的數據的恢復方法,而不用從邏輯備份或物理備份中恢復過來。
主要的閃回技術(Flashback)支持以下幾種恢復級別:
事務閃回:對表進行了insert, update, delete 操作,已經commit 了,發現弄錯了,需要恢復到某個commit操作之前的數據,則需要撤銷剛才的某個操作。
行級閃回:對表進行了insert, update, delete 操作,需要恢復到某個時間點。
表級閃回:錯誤的drop table操作,需要表和表中的數據。
數據庫級閃回:錯誤地對整個數據庫導入很多表數據,需要將整個數據庫恢復到過去的時間點。
閃回查詢:閃回查詢主要是根據Undo表空間數據進行多版本查詢,允許用戶查詢過去某個時間點的數據,用以重構由于意外刪除或更改的數據,數據不會變化。
oracle閃回功能的前提是在開啟了歸檔日志,而且設置了合理的閃回區擁有存儲相關執行操作,最后數據庫要開啟閃回功能,步驟如下:
1、開啟歸檔日志,這個步驟就不一一再細說了,自行查詢相關操作,主要是在
mount狀態:alter database archivelog;
2、設置閃回區:
--指定閃回恢復區的位置 alter system set db_recovery_file_dest='C:AppAdministratorflash_recovery_area' scope=both; --指定閃回恢復區的可用空間大小 alter system set db_recovery_file_dest_size=4G scope=both; --指定數據庫可以回退的時間,單位為分鐘,默認是一天時間,實際取決于閃回區大小 alter system set db_flashback_retention_target=4320 scope=both;
3、在mount狀態下,開啟Flashback,如下:
alter database flashback on;
?例子:簡單利用閃回查詢恢復剛剛誤刪除的學生信息表(STUINFO)中的學生張三(學號:SC201801001)。模擬步驟如下:
1、刪除學生張三 :
delete from student.stuinfo t where t.stuname='張三'; commit;
2、通過查詢stuinfo執行刪除之前的時間點的記錄,如下:
select * from student.stuinfo as of timestamp sysdate-10/1440;
?