Flashback在開發環境(有時生產環境的特殊情況下)是很有用的一個工具。
5.1 9i Flashback 簡介
5.1.1 原理
當數據 update 或 delete 時,原來的數據會保存在 undo 表空間中,保存的最少時間是 UNDO_RETENTION.實際的保存時間與 undo表空間的大小和數據更改的繁忙程度相關。 UNDO_RETENTION 的參數(單位為秒)指定 Oracle保存用於 Flashback查詢的 undo映像 的時間。一般你可以將這個值設為一整天(864000秒),這樣你就能看到前一天全天的映像。 當然,你的在線 undo日志必須足夠大,大到足以能保存一整天的 undo日志數據,對於繁忙的 Oracle系統,這個數值可以達到很大。
5.1.2 一些限制
服務器必須配置成使用自動 undo管理。
在使用 Flashback查詢時不能使用 DDL或者 DML.
Flashback 不取消 DDL操作,例如 DROP命令。 數據庫管理員做一些必要的設置之後,一般用戶才能使用 Flashback查詢功能:
SQL> ALTER SYSTEM SET UNDO_MANAGEMENT=AUTO
SQL> ALTER SYSTEM SET UNDO_RETENTION=86400
SQL> GRANT EXECUTE ON DBMS_FlashBACK TO USERNAME;
5.1.3 獲得SCN或時間點
在 Flashback 時,可以嘗試多個 SCN,獲取最佳值。
如果能得知具體時間,那麼可以獲得准確的數據閃回。
SQL> alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS'; SQL> select sysdate from v$database;
捕捉提交的 SCN: // 不知為什麼,兩種方法獲得的 SCN不一樣
SQL> select dbms_Flashback.get_system_change_number scn from dual;
SQL> select max(ktuxescnw * power(2,32) + ktuxescnb) SCN from x$ktuxe;
5.1.4 啟用或禁用Flashback查詢
使用系統改變數(SCN)或者真實時間來指定 Flashback 的時間點來獲取數據映象。
方法一:SQL> select * from [TABLE] as of scn 129292;
SQL> select * from [TABLE] as of timestamp to_timestamp('時間', ‘時間格式');
SQL> select * from saflog as of timestamp to_timestamp('2007-12-18 08:40:00','YYYY-MM-DD HH24:MI:SS');
方法二:啟用:
SQL> exec dbms_Flashback.enable_at_system_change_number(112112);
SQL> exec dbms_Flashback.enable_at_time('28-AUG-02 11:00:00');啟用後看到的只是閃回的結果,實際上並未恢復數據。且閃回狀態下不能做DML操作。可以先恢復到一個臨時表中。見示例。
禁用:SQL> execute dbms_Flashback.disable();
5.1.5 示例:
declare cursor c1 is select * from scott.emp_temp; r_c1 scott.e%rowt ype; begin loop dbms_Flashback.enable_at_system_change_number(49570); if c1%isopen=false then open c1;end if; fetch c1 into r_c1; dbms_Flashback.disable(); exit when c1%notfound; update scott.emp_temp set sal=r_c1.sal where empno=r_c1.empno; commit; end loop; exec dbms_Flashback.disable(); close c1; end; /5.2 10g Flashback 的增強
10g 的 Flashback進行了增強和修改,通過回閃,用戶可以完成許多不可能恢復的工作,目前 Oracle10g 的回閃包括以下特性;
1〉oracle falshback Database.該特性允許 Oracle 通過 Flashback database 語句,將數據庫會滾到前一個時間點或者scn 上,而不需要作時間點的恢復工作!
2〉oracle falshback table.該特性允許 Oracle通過 Flashback table 語句,將表會滾到前一個時間點或者 scn 上。
3〉oracle falshback drop.該特性允許 Oracle把恢復 drop掉的 table 或者索引。
4〉Oracle falshback version query.該特性可以得到特定的表在某一個時間段內的任何修改記錄!
5〉Oracle falshback transaction query該特性可以限制用戶在某一個事務級別上檢查數據庫的修改操作,適用於診斷問 題、分析性能、審計事務。