Oracle Flashback技術之Flashback Query

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可以查看或回滾這個錯誤的事務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章