【備份與恢復】使用Flashback Database(不完全恢復)

ljm0211發表於2012-06-25
使用SQL*Plus進行閃回:
       SQL*Plus閃回語法可以接受一個時間標記或一個系統改變號實參,與RMAN不同的是,這種語法不接受日期或日誌切換序列號實參。
       如果不能確定需要返回的時間點,那麼就可能透過組合閃回與恢復進行多次嘗試。以下面給出的場景為例。
       在2004年12月20日的10:00左右,某位初級的DBA誤以為自己登入了測試資料庫,因而在其實際登入的產品資料庫上刪除了一個重要的模式。我們會在十分鐘之內注意到這個錯誤,不過呼叫中心使用這個大型且繁忙的資料庫來接手指令和計算每秒鐘的處理數。在這種情況下,第一個步驟應當是關閉資料庫:
    SQL> shutdown abort;

       這裡不需要使用其他型別的關閉,其原因在於所有正在進行中的工作都將丟失,並且需要最小化停機時間。隨後,將資料庫返回至10:00:
    SQL> startup mount;
    SQL> flashback database to timestamp to _timestamp('20-12-04 10:00:00','dd-mm-yy hh24:mi:ss');
    SQL> alter database open read only;
      
       須要注意的是,上面的命令對用於時間標記格式的NLS設定十分敏感,這與RECOVER DATABASE UNTIL TIME命令不同。因為資料庫位於只讀模式中,所以我們能夠執行一個針對被刪除模式的查詢。如果發現仍然存在這個模式,那麼可能需要再恢復一些使用者資料。
    SQL> shutdown abort;
    SQL> startup mount;
    SQL> recover database until time '2004-12-20:10:02:00';
    SQL> alter database open read only;

       再次執行測試查詢,就會發現又經過兩分鐘的恢復後指定的模式消失:這個模式肯定是在10:00到10:02之間被刪除的。因此,我們採用了折中的方法:
    SQL> shutdown abort;
    SQL> startup mount;
    SQL> flashback database to timestamp to _timestamp('20-12-04 10:01:00','dd-mm-yy hh24:mi:ss');
    SQL> alter database open read only;
      
       如果指定模式已不存在,那麼可以再閃回幾秒鐘。如果指定模式仍然存在,那麼可以再執行幾秒鐘的恢復。透過在指定模式中執行查詢所進行的測試,我們就可以重複地執行閃回和恢復命令,直至查詢到所期望的時間點。到達滿足要求的某個時間點時,進行最終的關閉,然後再使用RESETLOGS命令建立一個能夠正常使用的已開啟的新資料庫場景:
    SQL> shutdown abort;
    SQL> startup mount;
    SQL> alter database open resetlogs;

使用RMAN進行閃回:
       在RMAN環境內,我們可以選擇將資料庫閃回之某個時間點、某個SCN或某個日誌切換序列號:
    RMAN> flashback database to time = to_date('20-12-04 10:00:00','yy-mm-dd hh24:mi:ss');
    RMAN> flashback database to scn=2728665;
    RMAN> flashback database to sequence=2123 thread=1;
       除了語法中的細微變化之外,RMAN閃回與SQL*Plus閃回是相同的,特別是能夠使用重複應用閃回和恢復的相同方法查詢到開啟資料庫的最最佳化時間點。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11411056/viewspace-733755/,如需轉載,請註明出處,否則將追究法律責任。

相關文章