用Oracle閃回功能恢復偶然丟失的資料
摘 要:本文提出了閃回功能的原理,描述了利用Oracle 9i或Oracle 10g的閃回功能進行恢復偶然丟失資料的方法。
關鍵詞:Oracle;閃回;回滾段;資料恢復
引言
人為的錯誤是資料庫系統失敗的重要原因之一,根據調查約40%的系統問題是操作失誤或者使用者錯誤引起的,這些人為的錯誤又特別難以避免。傳統上當發生數 據丟失、資料錯誤問題時,解決的主要方法就是資料的匯入/匯出、備份/恢復技術。這些方法都需要發生資料錯誤之前有一個正確的備份,才能進行恢復。恢復時 不取決於錯誤程度,而只取決於備份/恢復策略。這種方法既耗時又使資料庫系統不能提供服務,對於一些使用者偶然地刪除資料這類小錯誤來說顯得有些"大材小用 "。那麼如何來恢復這種偶然的錯誤操作造成的資料丟失呢?從Oracle 9i開始提供了基於回滾段的閃回查詢(Flashback Query)功能,可用於恢復錯誤的DML操作。在Oracle 10g中對閃回查詢做了較大改進,不再侷限於閃回查詢,還可用於恢復錯誤的DDL(Drop)操作、閃回表、閃回資料庫等。
Oracle 9i的閃回查詢概述
1、Oracle 9i的閃回查詢功能
在Oracle 9i之前,如果使用者錯誤運算元據後,除了不完全恢復外,沒有好的解決辦法。Oracle 9i中提供閃回查詢,由一個新的包DBMS_FLASH來實現。使用者使用閃回查詢可以及時取得誤操作DML(Delete、Update、Insert) 前某一時間點資料庫的映像檢視,使用者可以利用系統時間或系統改變號(SCN:System Change Number)來指定這個只讀檢視,並可以針對錯誤進行相應的恢復措施。閃回查詢功能完全依賴於自動回滾段管理(AUM),對於Drop等誤操作不能恢 復。閃回特性可應用在以下方面:
(1)自我維護過程中的修復:當一些重要的記錄被意外刪除,使用者可以向後移動到一個時間點,檢視丟失的行並把它們重新插入現在的表內恢復。
(2)恢復Email和聲音Email:當使用者意外刪除了Email或者聲音資訊時,可以通過移回到固定時間點來恢復刪除。
(3)賬號平衡狀況:可以檢視以前的歷史資料。如銀行外幣管理中用於記錄特定時間的匯率。在以前,匯率變更被記錄在一個歷史表中,現在就可以通過閃回功能進行查詢。
(4)用於趨勢分析的決策支援系統:決策支援系統和聯機分析應用必須執行一個長時間的事務。使用閃回查詢,這些應用可以對歷史資料執行分析和建模。例如,特定產品如礦泉水隨季節變化需求情況的變化。
2、回滾段概述
回滾段用於存放資料修改之前的位置和值,回滾段的頭部包含正在使用的該回滾段事務的資訊。回滾段的作用如下:
(1)事務回滾:當事務修改表中資料的時候,該資料修改前的值(即前影像)會存放在回滾段中,當使用者回滾事務時,Oracle將會利用回滾段中的資料前影像來將修改的資料恢復到原來的值。
(2)事務恢復:當事務正在處理的時候,例程失敗,回滾段的資訊儲存在重做日誌檔案中,Oracle將在下次開啟資料庫時利用回滾來恢復未提交的資料。
(3)讀一致性:當一個會話正在修改資料時,其它的會話將看不到該會話未提交的修改。而且,當一個語句正在執行時,該語句將看不到從該語句開始執行後的未提交的修改(語句級讀一致性)。
3、Oracle中Delete和Commit操作的流程分析
(1)刪除(Delete)流程
·Oracle讀Block(資料塊)到Buffer Cache(緩衝區)(如果該Block在Buffer中不存在);
·在Redo Log Buffer(重做日誌緩衝區)中記錄Delete操作的細節;
·在相應回滾段段頭的事物表中建立一個Undo(回滾)條目;
·把將要刪除的記錄建立前映象,存放到Undo Block(回滾塊)中;
·在Buffer Cache中的相應資料塊上刪除記錄,並且標記相應的資料塊為Dirty(髒)。
(2)提交(Commit)流程
·Oracle產生一個SCN;
·在回滾段事物表中標記該事物狀態為Commited;
·LGWR(日誌讀寫程式) Flush Log Buffer到日誌檔案;
·如果此時資料塊仍然在Buffer Cache中,那麼SCN將被記錄到Block Header上,這被稱為快速提交;
·如果Dirty Block已經被寫回到磁碟,那麼下一個訪問這個Block的程式將會自回滾段中獲取該事物的狀態,確認該事物被提交。然後這個程式獲得提交SCN並寫回到Block Header上,這被稱為延遲塊清除。
4、Oracle 9i中閃回查詢操作例項
進行閃回查詢必須設定自動回滾段管理,在init.ora設定引數UNDO_MANAGEMENT=AUTO,引數UNDO_RETENTION=n,決定了能往前閃回的最大時間,值越大就需要越多Undo空間。
例:Oracle 9i的Flashback Query操作。
(1)建立閃回查詢使用者
(2)建立測試表,插入測試記錄
注意:在執行步驟3或者步驟4之前,等待5分鐘。
(3)刪除記錄
通過以上的操作,我們插入了兩條記錄,並刪除了其中一條記錄。在以下的操作中,我們將通過flashback query找到刪除的記錄
(4)閃回查詢
可以看出,雖然刪除記錄並提交,但是通過閃回操作,仍能查詢到刪除前的兩條記錄。需要注意Oracle每5分鐘記錄一次SCN,並將SCN和對應時間的 對映進行紀錄。如果原來插入的記錄到做閃回操作的時間在5分鐘之內,用基於時間的閃回查詢可能得不到記錄,因為基於時間點的查詢實際上是轉化為最近的一次 SCN,然後從這個SCN開始進行恢復。因此,如果需要精確的查詢可以採用基於SCN的閃回查詢,可精確閃回到需要恢復的時間。可以通過 DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER語句獲取SCN。
Oracle 10g的閃回查詢概述
與Oracle 9i相比Oracle 10g的Flashback有了非常大的改進,從普通的Flashback Query發展到了多種形式,主要表現在如下幾方面新特性:
1、Flashback Database
Oracle Flashback Database特性允許通過SQL語句Flashback Database語句,讓資料庫前滾到當前的前一個時間點或者SCN,而不需要做時間點的恢復。閃回資料庫可以迅速將資料庫回到誤操作或人為錯誤的前一個 時間點,如Word中的"撤消"操作,可以不利用備份就快速的實現基於時間點的恢復。Oracle通過建立新的Flashback Logs(閃回日誌),記錄資料庫的閃回操作。如果希望能閃回資料庫,需要設定如下引數:DB_RECOVER_FILE_DEST日誌的存放位置, DB_RECOVER_FILE_DEST_SIZE恢復區的大小。在建立資料庫的時候,Oracle將自動建立恢復區,但預設是關閉的,需要執行 alter database flashback on命令。
例:執行Flashback Database命令格式。
2、Flashback Table
Oracle Flashback Table特性允許利用Flashback Table語句,確保閃回到表的前一個時間點。與Oracle 9i中的Flashback Query相似,利用回滾段資訊來恢復一個或一些表到以前的一個時間點(一個快照)。要注意的是,Flashback Table不等於Flashback Query,Flashback Query僅僅是查詢以前的一個快照點而已,並不改變當前表的狀態,而Flashback Table將改變當前表及附屬物件一起回到以前的時間點。
語法:
注意:如果需要閃回一個表,需要以下條件:
·需要有flashback any table的系統許可權或者是該表的flashback物件許可權;
·需要有該表的select,insert,delete,alter許可權;
·必須保證該表row movement。
例:執行將test表閃回到2005年5月7日下午3點。
3、Flashback Drop
Oracle Flashback Drop特性提供一個類似回收站的功能,用來恢復不小心被刪除的表。當刪除表時,Oracle 10g並不立刻釋放被刪除的表所佔用的空間,而是將這個被刪除的表進行自動重新命名(為了避免同類物件名稱的重複)並放進回收站中。所謂的回收站類似於 Windows系統中的回收站,是一個虛擬的容器,用於存放所有被刪除的物件,在回收站中被刪除的物件將佔用建立時的同樣的空間。如果這個被刪除的表需要 進行恢復,就可利用Flashback Drop功能。
例:進行一個刪除表後恢復的簡單測試。
(1)顯示回收站資訊
可以看到,回收站中是沒有任何結果的,表示沒有任何表在回收站中。
(2)建立一個表,並刪除,再次顯示回收站資訊
(3)對被刪除的表進行恢復
(4)管理回收站
清除回收站中的單個表:purge table test_drop
清除整個回收站:purge recyclebin
清除不同的物件回收站:purge user_recyclebin或purge dba_recyclebin
(5)確認刪除一個表
如果刪除一個表且不放到回收站中不能進行恢復,在drop語句中可以利用purge選項。
4、Flash Version Query
Oracle Flashback Version Query特性,利用儲存的回滾資訊,可以看到特定的表在時間段內的任何修改,如電影的回放一樣,可以瞭解表在該期間的任何變化。Flashback version query一樣依賴於AUM,提供了一個檢視行改變的功能,能找到所有已經提交了的行的記錄,分析出過去時間都執行了什麼操作。Flashback version query採用VERSIONS BETWEEN語句來進行查詢,常用的方法:
·VERSIONS_SCN - 系統改變號
·VERSIONS_TIMESTAMP - 時間
例如:在test表中,時間1插入一條記錄,時間2刪除了這條記錄,對於時間3執行select * from test當然查詢不到這條記錄,只能看到該表最後的提交記錄。這時如果利用Flash Table或者是Flash Query,只能看到過去的某一時間點的一個快照,而利用Flashback Version Query,能夠把時間1、時間2的操作給記錄下來,並詳細的查詢出對錶進行的任何操作。
在上述查詢中,列 versions_starttime、versions_endtime、versions_xid、versions_operation是偽列,還 有一些偽列,如versions_startscn和versions_endscn顯示了該時刻的系統更改號。列versions_xid顯示了更改該 行的事務識別符號。
當然,除了分析以上所有的變更之外,可以根據需要指定時間段,如顯示在2005-05-07時間在15:30到16:30之間test表的所有變更。
5、Flashback Transaction Query
Oracle Flashback Transaction Query特性確保檢查資料庫的任何改變在一個事務級別,可以利用此功能進行診斷問題、效能分析和審計事務。它其實是Flashback Version Query查詢的一個擴充,Flashback Version Query說明了可以審計一段時間內表的所有改變,但是也僅僅是能發現問題,對於錯誤的事務,沒有好的處理辦法。而Flashback Transaction Query提供了從FLASHBACK_TRANSACTION_QUERY檢視中獲得事務的歷史以及Undo_sql(回滾事務對應的sql語句),也 就是說審計一個事務到底做了什麼,甚至可以回滾一個已經提交的事務。
例:Flashback Transaction Query的操作例項。
(1)在test表中刪除記錄,獲得事務的標識XID,然後提交。
在測試中方便起見,在事務沒有提交的時候,獲得事務的XID為04001F0035000000。實際情況下,不可能去跟蹤每個事務,想要獲得已提交事務的XID,就必須通過上面的Flashback Version Query。
(2)進行Flashback Transaction Query
注意:這個刪除語句對應的是1個Insert語句,如果想回滾這個事務,執行這個Insert語句即可。
可以看到,Flashback Transaction Query主要用於審計一個事務,並可以回滾一個已經提交的事務。如果確定出錯的事務是最後一個事務,我們利用Flashback Table或者Flashback Query就可以解決問題。但是,如果執行了一個錯誤的事務之後,又執行了一系列正確的事務,那麼上面的方法就無能為力,利用Flashback Transaction Query可以檢視或回滾這個錯誤的事務。
結束語
關鍵詞:Oracle;閃回;回滾段;資料恢復
引言
人為的錯誤是資料庫系統失敗的重要原因之一,根據調查約40%的系統問題是操作失誤或者使用者錯誤引起的,這些人為的錯誤又特別難以避免。傳統上當發生數 據丟失、資料錯誤問題時,解決的主要方法就是資料的匯入/匯出、備份/恢復技術。這些方法都需要發生資料錯誤之前有一個正確的備份,才能進行恢復。恢復時 不取決於錯誤程度,而只取決於備份/恢復策略。這種方法既耗時又使資料庫系統不能提供服務,對於一些使用者偶然地刪除資料這類小錯誤來說顯得有些"大材小用 "。那麼如何來恢復這種偶然的錯誤操作造成的資料丟失呢?從Oracle 9i開始提供了基於回滾段的閃回查詢(Flashback Query)功能,可用於恢復錯誤的DML操作。在Oracle 10g中對閃回查詢做了較大改進,不再侷限於閃回查詢,還可用於恢復錯誤的DDL(Drop)操作、閃回表、閃回資料庫等。
Oracle 9i的閃回查詢概述
1、Oracle 9i的閃回查詢功能
在Oracle 9i之前,如果使用者錯誤運算元據後,除了不完全恢復外,沒有好的解決辦法。Oracle 9i中提供閃回查詢,由一個新的包DBMS_FLASH來實現。使用者使用閃回查詢可以及時取得誤操作DML(Delete、Update、Insert) 前某一時間點資料庫的映像檢視,使用者可以利用系統時間或系統改變號(SCN:System Change Number)來指定這個只讀檢視,並可以針對錯誤進行相應的恢復措施。閃回查詢功能完全依賴於自動回滾段管理(AUM),對於Drop等誤操作不能恢 復。閃回特性可應用在以下方面:
(1)自我維護過程中的修復:當一些重要的記錄被意外刪除,使用者可以向後移動到一個時間點,檢視丟失的行並把它們重新插入現在的表內恢復。
(2)恢復Email和聲音Email:當使用者意外刪除了Email或者聲音資訊時,可以通過移回到固定時間點來恢復刪除。
(3)賬號平衡狀況:可以檢視以前的歷史資料。如銀行外幣管理中用於記錄特定時間的匯率。在以前,匯率變更被記錄在一個歷史表中,現在就可以通過閃回功能進行查詢。
(4)用於趨勢分析的決策支援系統:決策支援系統和聯機分析應用必須執行一個長時間的事務。使用閃回查詢,這些應用可以對歷史資料執行分析和建模。例如,特定產品如礦泉水隨季節變化需求情況的變化。
2、回滾段概述
回滾段用於存放資料修改之前的位置和值,回滾段的頭部包含正在使用的該回滾段事務的資訊。回滾段的作用如下:
(1)事務回滾:當事務修改表中資料的時候,該資料修改前的值(即前影像)會存放在回滾段中,當使用者回滾事務時,Oracle將會利用回滾段中的資料前影像來將修改的資料恢復到原來的值。
(2)事務恢復:當事務正在處理的時候,例程失敗,回滾段的資訊儲存在重做日誌檔案中,Oracle將在下次開啟資料庫時利用回滾來恢復未提交的資料。
(3)讀一致性:當一個會話正在修改資料時,其它的會話將看不到該會話未提交的修改。而且,當一個語句正在執行時,該語句將看不到從該語句開始執行後的未提交的修改(語句級讀一致性)。
3、Oracle中Delete和Commit操作的流程分析
(1)刪除(Delete)流程
·Oracle讀Block(資料塊)到Buffer Cache(緩衝區)(如果該Block在Buffer中不存在);
·在Redo Log Buffer(重做日誌緩衝區)中記錄Delete操作的細節;
·在相應回滾段段頭的事物表中建立一個Undo(回滾)條目;
·把將要刪除的記錄建立前映象,存放到Undo Block(回滾塊)中;
·在Buffer Cache中的相應資料塊上刪除記錄,並且標記相應的資料塊為Dirty(髒)。
(2)提交(Commit)流程
·Oracle產生一個SCN;
·在回滾段事物表中標記該事物狀態為Commited;
·LGWR(日誌讀寫程式) Flush Log Buffer到日誌檔案;
·如果此時資料塊仍然在Buffer Cache中,那麼SCN將被記錄到Block Header上,這被稱為快速提交;
·如果Dirty Block已經被寫回到磁碟,那麼下一個訪問這個Block的程式將會自回滾段中獲取該事物的狀態,確認該事物被提交。然後這個程式獲得提交SCN並寫回到Block Header上,這被稱為延遲塊清除。
4、Oracle 9i中閃回查詢操作例項
進行閃回查詢必須設定自動回滾段管理,在init.ora設定引數UNDO_MANAGEMENT=AUTO,引數UNDO_RETENTION=n,決定了能往前閃回的最大時間,值越大就需要越多Undo空間。
例:Oracle 9i的Flashback Query操作。
(1)建立閃回查詢使用者
SQL> create user flashtest identified by flashtest; SQL> grant connect, resource to flashtest; SQL> grant execute on dbms_flashback to flashtest; SQL> connect flashtest/flashtest; |
(2)建立測試表,插入測試記錄
SQL> create table test(id number(3)); SQL> insert into test values (1); SQL> insert into test values(2); SQL> commit; SQL> create table rec_date(date_scn); |
注意:在執行步驟3或者步驟4之前,等待5分鐘。
(3)刪除記錄
SQL> execute dbms_flashback.disable; SQL> insert into rec_date select sysdate from dual; SQL> commit; SQL> delete from test where id=1; SQL> commit; |
通過以上的操作,我們插入了兩條記錄,並刪除了其中一條記錄。在以下的操作中,我們將通過flashback query找到刪除的記錄
(4)閃回查詢
SQL> DECLARE Restore_scn date; BEGIN Select date_scn into restore_scn from rec_date; Dbms_flashback.enable_at_time (restore_scn); END; SQL> select * from test; ID 1 2 |
可以看出,雖然刪除記錄並提交,但是通過閃回操作,仍能查詢到刪除前的兩條記錄。需要注意Oracle每5分鐘記錄一次SCN,並將SCN和對應時間的 對映進行紀錄。如果原來插入的記錄到做閃回操作的時間在5分鐘之內,用基於時間的閃回查詢可能得不到記錄,因為基於時間點的查詢實際上是轉化為最近的一次 SCN,然後從這個SCN開始進行恢復。因此,如果需要精確的查詢可以採用基於SCN的閃回查詢,可精確閃回到需要恢復的時間。可以通過 DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER語句獲取SCN。
Oracle 10g的閃回查詢概述
與Oracle 9i相比Oracle 10g的Flashback有了非常大的改進,從普通的Flashback Query發展到了多種形式,主要表現在如下幾方面新特性:
1、Flashback Database
Oracle Flashback Database特性允許通過SQL語句Flashback Database語句,讓資料庫前滾到當前的前一個時間點或者SCN,而不需要做時間點的恢復。閃回資料庫可以迅速將資料庫回到誤操作或人為錯誤的前一個 時間點,如Word中的"撤消"操作,可以不利用備份就快速的實現基於時間點的恢復。Oracle通過建立新的Flashback Logs(閃回日誌),記錄資料庫的閃回操作。如果希望能閃回資料庫,需要設定如下引數:DB_RECOVER_FILE_DEST日誌的存放位置, DB_RECOVER_FILE_DEST_SIZE恢復區的大小。在建立資料庫的時候,Oracle將自動建立恢復區,但預設是關閉的,需要執行 alter database flashback on命令。
例:執行Flashback Database命令格式。
SQL>flashback database to time to_timestamp(xxx); SQL>flashback database to scn xxx |
2、Flashback Table
Oracle Flashback Table特性允許利用Flashback Table語句,確保閃回到表的前一個時間點。與Oracle 9i中的Flashback Query相似,利用回滾段資訊來恢復一個或一些表到以前的一個時間點(一個快照)。要注意的是,Flashback Table不等於Flashback Query,Flashback Query僅僅是查詢以前的一個快照點而已,並不改變當前表的狀態,而Flashback Table將改變當前表及附屬物件一起回到以前的時間點。
語法:
flashback table tablename to timestamp xxx或 flashback table tablename to scn xxx |
注意:如果需要閃回一個表,需要以下條件:
·需要有flashback any table的系統許可權或者是該表的flashback物件許可權;
·需要有該表的select,insert,delete,alter許可權;
·必須保證該表row movement。
例:執行將test表閃回到2005年5月7日下午3點。
SQL>flashback table test to timestamp to_timestamp(’2005-05-07 15:00:00’,’yyyy-mm-dd hh24:mi:ss’); |
3、Flashback Drop
Oracle Flashback Drop特性提供一個類似回收站的功能,用來恢復不小心被刪除的表。當刪除表時,Oracle 10g並不立刻釋放被刪除的表所佔用的空間,而是將這個被刪除的表進行自動重新命名(為了避免同類物件名稱的重複)並放進回收站中。所謂的回收站類似於 Windows系統中的回收站,是一個虛擬的容器,用於存放所有被刪除的物件,在回收站中被刪除的物件將佔用建立時的同樣的空間。如果這個被刪除的表需要 進行恢復,就可利用Flashback Drop功能。
例:進行一個刪除表後恢復的簡單測試。
(1)顯示回收站資訊
SQL>show recyclebin; |
可以看到,回收站中是沒有任何結果的,表示沒有任何表在回收站中。
(2)建立一個表,並刪除,再次顯示回收站資訊
SQL>create table test_drop(name varchar2(10)); SQL>drop table test_drop; SQL>show recyclebin; ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME TEST_DROP BIN$b+XkkO1RS5K10uKo9BfmuA==$0 TABLE 2005-05-07:14:30:47 |
(3)對被刪除的表進行恢復
SQL>flashback table test_drop to before drop;或 SQL>flashback table "BIN$b+XkkO1RS5K10uKo9BfmuA==$0" to before drop; |
(4)管理回收站
清除回收站中的單個表:purge table test_drop
清除整個回收站:purge recyclebin
清除不同的物件回收站:purge user_recyclebin或purge dba_recyclebin
(5)確認刪除一個表
SQL>drop table test_drop purge; |
如果刪除一個表且不放到回收站中不能進行恢復,在drop語句中可以利用purge選項。
4、Flash Version Query
Oracle Flashback Version Query特性,利用儲存的回滾資訊,可以看到特定的表在時間段內的任何修改,如電影的回放一樣,可以瞭解表在該期間的任何變化。Flashback version query一樣依賴於AUM,提供了一個檢視行改變的功能,能找到所有已經提交了的行的記錄,分析出過去時間都執行了什麼操作。Flashback version query採用VERSIONS BETWEEN語句來進行查詢,常用的方法:
·VERSIONS_SCN - 系統改變號
·VERSIONS_TIMESTAMP - 時間
例如:在test表中,時間1插入一條記錄,時間2刪除了這條記錄,對於時間3執行select * from test當然查詢不到這條記錄,只能看到該表最後的提交記錄。這時如果利用Flash Table或者是Flash Query,只能看到過去的某一時間點的一個快照,而利用Flashback Version Query,能夠把時間1、時間2的操作給記錄下來,並詳細的查詢出對錶進行的任何操作。
SQL>select versions_starttime,versions_endtime, versions_xid,versions_operation,id from test versions between timestamp minvalue and maxvalue order by versions_starttime; |
在上述查詢中,列 versions_starttime、versions_endtime、versions_xid、versions_operation是偽列,還 有一些偽列,如versions_startscn和versions_endscn顯示了該時刻的系統更改號。列versions_xid顯示了更改該 行的事務識別符號。
當然,除了分析以上所有的變更之外,可以根據需要指定時間段,如顯示在2005-05-07時間在15:30到16:30之間test表的所有變更。
SQL>select id from test versions between timestamp to_date(’2005-05-07 15:30:00’,’yyyy-mm-dd hh24:mi:ss’) and to_date(’2005-05-07 16:30:00’,’yyyy-mm-dd hh24:mi:ss’) |
5、Flashback Transaction Query
Oracle Flashback Transaction Query特性確保檢查資料庫的任何改變在一個事務級別,可以利用此功能進行診斷問題、效能分析和審計事務。它其實是Flashback Version Query查詢的一個擴充,Flashback Version Query說明了可以審計一段時間內表的所有改變,但是也僅僅是能發現問題,對於錯誤的事務,沒有好的處理辦法。而Flashback Transaction Query提供了從FLASHBACK_TRANSACTION_QUERY檢視中獲得事務的歷史以及Undo_sql(回滾事務對應的sql語句),也 就是說審計一個事務到底做了什麼,甚至可以回滾一個已經提交的事務。
例:Flashback Transaction Query的操作例項。
(1)在test表中刪除記錄,獲得事務的標識XID,然後提交。
SQL>delete from test where id=2; SQL>select xid from v$transaction; XID ---------------- 04001200AE010000 SQL>commit; |
在測試中方便起見,在事務沒有提交的時候,獲得事務的XID為04001F0035000000。實際情況下,不可能去跟蹤每個事務,想要獲得已提交事務的XID,就必須通過上面的Flashback Version Query。
(2)進行Flashback Transaction Query
SQL>select * from FLASHBACK_TRANSACTION_QUERY where xid=’04001F0035000000’; UNDO_SQL insert into "FLASHTEST"."TEST"("ID") values (’2’); |
注意:這個刪除語句對應的是1個Insert語句,如果想回滾這個事務,執行這個Insert語句即可。
可以看到,Flashback Transaction Query主要用於審計一個事務,並可以回滾一個已經提交的事務。如果確定出錯的事務是最後一個事務,我們利用Flashback Table或者Flashback Query就可以解決問題。但是,如果執行了一個錯誤的事務之後,又執行了一系列正確的事務,那麼上面的方法就無能為力,利用Flashback Transaction Query可以檢視或回滾這個錯誤的事務。
結束語
通過上面的描述,可以看出閃回功能使使用者恢復偶然的錯誤刪除更加容易,增強了系統的可用性與讀一致性。。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10742223/viewspace-217042/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle閃回功能恢復偶然丟失的資料(轉)Oracle
- Orcale利用閃回功能恢復資料
- Oracle資料庫的閃回恢復區Oracle資料庫
- 恢復REDO Log丟失的Oracle資料庫Oracle資料庫
- Oracle備份與恢復【丟失資料檔案的恢復】Oracle
- oracle 線上日誌全部丟失的資料恢復Oracle資料恢復
- Oracle閃回刪除恢復誤刪資料Oracle
- Oracle閃回恢復區Oracle
- 資料檔案丟失的恢復
- Mac資料丟失怎麼用EasyRecovery恢復Mac
- 硬碟資料丟失如何恢復?硬碟
- 分割槽丟失資料恢復資料恢復
- 【備份恢復】閃回資料庫(一)閃回資料庫的管理資料庫
- Oracle閃回查詢恢復delete刪除資料Oracledelete
- chkdsk 後資料丟失的恢復方法
- Oracle Redo丟失恢復方案Oracle
- 【資料庫資料恢復】斷電導致Oracle資料庫資料丟失的資料恢復案例資料庫資料恢復Oracle
- 伺服器資料丟失了怎麼恢復/分割槽丟失恢復教程伺服器
- 資料檔案丟失如何恢復
- oracle歸檔日誌丟失後的資料庫恢復Oracle資料庫
- RMAN恢復案例:丟失全部資料檔案恢復
- Oracle Password檔案丟失的恢復Oracle
- 利用binlog2sql閃回丟失資料SQL
- 閃回恢復一個表中的資料
- RMAN完全恢復丟失的資料檔案
- 普通資料檔案丟失的恢復方法
- 資料檔案丟失損壞的恢復--
- Oracle DBA2 ---- 閃回恢復Oracle
- oracle rman之丟失spfile恢復Oracle
- Oracle 閃回技術 概覽 資料庫閃回功能Oracle資料庫
- Oracle -- 閃回恢復區---實踐1---閃回庫Oracle
- 【備份恢復】閃回資料庫(五)RMAN 命令列閃回資料庫資料庫命令列
- 【備份恢復】閃回資料庫(二) 基於 SCN 閃回資料庫資料庫
- 閃回查詢恢復誤刪資料
- 【DATAGUARD】Oracle 通過Dataguard指定恢復時間用於找回丟失資料Oracle
- 如何恢復伺服器資料丟失伺服器
- 電腦檔案丟失資料恢復資料恢復
- OMV資料恢復NAS陣列丟失資料恢復陣列