2005-01-07 12:12 PM
Oracle9i的Flashback查詢的用途非常多。終端用戶或者開發者幾乎每天都要恢復那些由於應用失誤造成的丟失數據或者被修改的數據。
Oracle宣稱你可以用Flashback查詢創建具有內嵌的、面向終端用戶的、自服務的糾錯能力的應用程序,但是很少有Oracle使用者打算去實現自服務糾錯或者是要求DBA進行flashback恢復。
你可以使用DBMS_FLASHBACK包去啓用或禁用Flashback查詢。你還能使用系統改變數(SCN)或者真實時間來指定flashback的時間點。
例如,假設你在上午11:15對數據庫作了一個不正確的改變。只要你的Flashback查詢處於啓用狀態,你就能使用下面的命令告訴Oracle應用上午11:00時所有的undo日誌映像:
EXECUTE dbms_Flashback.Enable_At_Time('28-AUG-02 11:00:00');
現在所有的查詢都將顯示上午11:00時的數據,你還可以很容易地恢復丟失的或者被修改的數據。
雖然這是及時回退一個顯著的有用特徵,但是還是有一些限制的:
- 服務器必須配置成使用自動undo管理。
- 在使用Flashback查詢時不能使用DDL或者DML。
- Flashback不取消DDL操作,例如DROP命令。
數據庫管理員做一些必要的設置之後,一般用戶才能使用Flashback查詢功能,下面是所要做的設置:
- ALTER SYSTEM SET UNDO_MANAGEMENT=AUTO
- ALTER SYSTEM SET UNDO_RETENTION=86400
- GRANT EXECUTE ON DBMS_FLASHBACK TO USERNAME;
UNDO_RETENTION的參數(單位爲秒)指定Oracle保存用於flashback查詢的undo映像的時間。一般你可以將這個值設爲一整天(864000秒),這樣你就能看到前一天全天的映像。當然,你的在線undo日誌必須足夠大,大到足以能保存一整天的undo日誌數據,對於繁忙的Oracle系統,這個數值可以達到很多G字節。