Oracle Flashback家族有四個成員,分別是以下:
Flashback Database ——閃回數據庫
Flashback Drop ——閃回刪除Flashback Table ——閃回表
Flashback Query(分Flashback Query,Flashback Version Query,Flashback Transaction Query) ——閃回查詢
今天主要講下Flashback Query技術:
Flashback Query(利用UNDO保留信息恢復)
1、Flash Version Query(利用UNDO保留信息恢復)
Oracle Flashback Version Query特性,利用保存的回滾信息,可以看到特定的表在時間段內的任何修改,如電影的回放一樣,可以瞭解表在該期間的任何變化。Flashback version query一樣依賴於AUM,提供了一個查看行改變的功能,能找到所有已經提交了的行的記錄,分析出過去時間都執行了什麼操作。Flashback version query採用VERSIONS BETWEEN語句來進行查詢,常用的方法:
(1)使用as of timestamp來進行閃回查詢:
SQL> select * from tb1 as of timestamp to_timestamp('2010-10-25 17:26:08','yyyy-mm-dd hh24:mi:ss')
minus select * from tb1;(所得結果就是誤操作的數據)
(2)使用as of scn來進行閃回查詢:
SQL> select * from tb1 as of scn ***;
SQL>select versions_starttime,versions_endtime, versions_xid,versions_operation,id
from test versions
between timestamp minvalue and maxvalue
order by versions_starttime;(查詢事務的xid信息)
注意:由以上可知,通過閃回查詢獲得所需的記錄信息,然後來構造新的DML語句並實施其操作來保證數據的完整性。
2、Flash Transaction Query(利用UNDO保留信息恢復)
Oracle Flashback Transaction Query特性確保檢查數據庫的任何改變在一個事務級別,可以利用此功能進行診斷問題、性能分析和審計事務。它其實是Flashback Version Query查詢的一個擴充,Flashback
Version Query說明了可以審計一段時間內表的所有改變,但是也僅僅是能發現問題,對於錯誤的事務,沒有好的處理辦法。而Flashback Transaction Query提供了從FLASHBACK_TRANSACTION_QUERY視圖中獲得事務的歷史以及Undo_sql(回滾事務對應的sql語句),也就是說審計一個事務到底做了什麼,甚至可以回滾一個已經提交的事務。
想要獲得已提交事務的XID,就必須通過上面的Flashback
Version Query。
SQL>select
* from FLASHBACK_TRANSACTION_QUERY where xid=’04001F0035000000’;
UNDO_SQL
--------------------
insert into "FLASHTEST"."TEST"("ID") values (’2’);
alter
database add supplemental log data;(有時候可能查詢到undo_sql爲空,是因爲supplement logging被禁用了,需要開啓)
注意:這個刪除語句對應的是1個Insert語句,如果想回滾這個事務,執行這個Insert語句即可。
可以看到,Flashback Transaction Query主要用於審計一個事務,並可以回滾一個已經提交的事務。如果確定出錯的事務是最後一個事務,我們利用Flashback Table或者Flashback Query就可以解決問題。但是,如果執行了一個錯誤的事務之後,又執行了一系列正確的事務,那麼上面的方法就無能爲力,利用Flashback
Transaction Query可以查看或回滾這個錯誤的事務。