天天看點

使用RMAN執行完整恢複

一、丢失重要或不重要的資料檔案時,使用RMAN執行完整恢複

  一般而言,在發生資料庫故障後,需要使用兩個步驟進行恢複:從備份位置還原一個或多個資料檔案,然後應用歸檔和聯機重做日志檔案,将整個資料庫或單獨資料檔案前滾到指定的系統更改号SCN。

  對于任何恢複過程而言,第一個步驟都是執行RESTORE指令,使用RESTORE指令時,RMAN會從磁盤或錄音帶檢索一個或多個資料檔案,以及恢複所需要的任何歸檔重做日志檔案。發出RECOVER指令時,RMAN會将歸檔和聯機重做日志檔案中已經送出的更改應用于已經還原的資料檔案中。

1、為不重要的檔案執行完整恢複

  如果丢失的資料檔案不在SYSTEM或UNDO表空間中,就将其視為不重要的資料檔案。當資料庫處于ARCHIVELOG模式時,不屬于SYSTEM或UNDO表空間的丢失或受損資料檔案的影響範圍僅限于受損或丢失資料檔案中的對象。

  通常恢複步驟如下:

  1)如果資料庫處于打開狀态,offline表空間:alter tablespace xxx offline immediate;

  2)使用RESTORE指令,從備份位置加載表空間的資料檔案:restore tablespace xxx;

  3)使用RECOVER指令,将歸檔和聯機重做日志檔案應用于已經還原的資料檔案:recover tablespace xxx;

  4)使表空間聯機:alter tablespace xxx online;

2、執行重要檔案的完整恢複

  1)如果資料庫處于打開狀态,使用shtudown abort指令關閉資料庫。

  2)使用startup mount指令重新打開資料庫。

  3)使用RMAN RESTORE指令,從備份位置複制(或還原)重要表空間的資料檔案。

  4)使用RMAN RECOVER指令應用任何歸檔或聯機重做日志檔案

  5)使用ALTER DATABASE OPEN指令重新打開資料庫。

二、使用RMAN執行不完整恢複

  将資料庫恢複到過去某個時間點。通過使用還原點,使用RMAN或閃回資料庫執行不完整恢複。

EX1:執行不完整恢複來還原USERS表空間

  1)建立針對目前SCN的還原點。

     create restore point before_disaster_strikes;

  2)删除example表空間的一些表或視圖

     drop table hr.job_history;

     drop view hr.emp_details_view;

  3)關閉執行個體,并以mount模式重新啟動資料庫

     shutdown immediate;

     startup mount;

  4)使用RMAN,利用還原點進行恢複

     run

     {

        set until restore point before_disaster_strikes;

        restore database;

        recover database;

     }

   5)使用RESETLOGS方式打開資料庫

     alter database ope resetlogs;

三、使用增量更新備份進行恢複

  通過在備份和恢複政策中使用映像副本,将可以極大的減少還原資料檔案或整個資料庫的時間。映像副本使用天然的Oracle資料檔案格式,無需從壓縮或解壓縮後的RMAN備份集重新建立。

  在任何使用映像副本的恢複場景中更新包含增量備份的映像副本時,隻需要應用自上次增量備份以來生成的歸檔和聯機重做日志檔案,不需要再執行資料檔案和資料庫的完全映像複制。如果資料檔案存在多個映像副本,RMAN會自己識别選擇最新的映像副本。

1、實施映像副本政策

  在建立整個資料庫的映像副本後,每天都增量更新映像副本:

  run {

    recover copy of database with tag 'inc_upd';

    backup incremental level 1 for recover of copy with tag 'inc_upd' database;

  }

  第一次運作時:

    不存在要還原的級别0的映像副本,同樣也沒有級别0增量備份。

    Starting recover at 25-MAY-08

    using channel ORA_DISK_1

    no copy of datafile 1 found tb recover

    Starting backup at 25-MAY-08

    no parent backup or copy of datafile 1 found

  第二次運作時:

    如果在執行級别1備份時不存在任何級别0備份,RMAN将自動建立級别0備份。第二次運作時,存在級别0備份,但不存在增量級别0備份,是以RMAN塊中的RECOVER指令将生成以下資訊:

    channel ORA_DISK_1:starting incremental level 1 datafile backup set

  第三次運作時:

    RECOVER指令會使用最新的級别1備份更新映像副本,進而執行另一個級别1增量備份。下次執行RUN塊時,同樣會這樣操作。結果,在第三次調用此腳本後,如果執行任何恢複操作,隻需要使用映像副本、一個增量備份以及自上一次級别1增量備份以來生成的任何歸檔和聯機重做日志。

  注:務必在增量更新的映像副本政策中使用标記。

四、切換使用映像副本以便加快恢複速度

1、使包含缺失資料檔案的表空間脫機。可以使用動态性能視圖v$recover_file、v$datafile_header或v$tablespace來确定需要恢複的資料檔案

2、使用RMAN SWITCH TO ...COPY指向缺失資料檔案的映像副本

3、使用RMAN RECOVER指令恢複資料檔案

4、再次使表空間聯機

EX1:使用switch指令快速恢複資料檔案

  1)select ts#,name from v$tablespace where ts#=:a;

     select file#,status,error,recover,tablespace_name,name from v$datafile_header where recover='YES';

  2)alter tablespace xxx offline immediate;

  3)RMAN>switch tablespace xxx to copy;

  4)RMAN>recover tablespace users;

  5)alter tablespace xxx online;

EX2:在原來的位置建立了xxx表空間的資料檔案後使用swtich指令

  select file#,df.name,ts#,ts.name from v$datafile df,v$tablespace ts where df.ts# = ts.ts#;

  1)建立傳回原始位置的資料檔案的映像副本

     backup as copy tablespace xxx format 'xxxx.dbf';

  2)使表空間脫機,以便為switch指令做準備

     alter tablespace xxx offline;

  3)切換到新建立的副本

     switch tablespace xxx to copy;

  4)在新位置恢複資料檔案

     recover tablespace xxx;

  5)表空間聯機

     alter tablespace xxx online;

  6)驗證恢複是否成功

     select file#,df.name,ts#,ts.name from v$datafile df,v$tablespace ts where df.ts# = ts.ts#;

  7)建立新映像副本以供資料檔案再次消失時使用。

     backup as copy tablespace xxx;

EX3:将RMAN SET NEWNAME與快速切換一起使用

    sql "alter tablespace xxx offline immediate";

    set newname for datafile '' to '';

    restore tablespace xxx;

    recover tablespace xxx;

    sql "alter tablespace xxx online";

五、将資料庫還原到新主機上

  使用RMAN,可以按多種方式将資料庫友善地還原到新主機上。

1、準備新主機

  1)記錄源資料庫的DBID

     select dbid from v$database;

  2)将初始化參數檔案從源庫複制到新主機中。

  3)確定新主機可以使用所有源資料庫備份内容,不要連接配接到恢複目錄。

2、在新主機上執行還原和恢複

步驟:

  1)在新主機上配置環境變量。

  2)使用NOCATALOG方式連接配接到新目标資料庫。

  3)設定DBID

  4)使用NOMOUNT方式啟動執行個體

  5)根據備份還原SPFILE

  6)關閉新執行個體

  7)編輯PFILE

  8)再次使用NOMOUNT方式啟動執行個體

  9)建立RMAN RUN塊來還原控制檔案

  10)建立RMAN RUN塊來還原和恢複資料庫

  11)使用RESETLOGS打開資料庫

示例:

  1)新主機設定環境變量

     $export ORACLE_SID=xxx

  2)使用NOCATALOG方式連接配接到新目标資料庫,但不要連接配接到恢複目錄

     $rman target /

     RMAN>set dbid xxx; ---源資料庫的

     sql>startup nomount

     RMAN>restore spfile to pfile 'xxxx' from autobackup;

     shutdown immediate

  8)再次以NOMOUNT方式啟動執行個體

     sql>startup force nomount pfile='xxxxx';

     run {

       restore contraolfile from autobackup;  --恢複到初始化參數control_files指定的位置

       alter database mount;

       set newname for datafile 1 to '';

       set until scn yyy;

       restore database;

       switch datafile all;

       recover database;

   11)alter database open resetlogs;

六、使用備份控制檔案進行恢複

  在極少數情況下,可能丢失目前控制檔案的所有副本,最新RMAN備份中也至少有一個自動備份控制檔案,另外,如果正在使用恢複目錄,可以在恢複目錄中找到最新控制檔案中的所有中繼資料。

  如果SPFILE未儲存在鏡像外部檔案系統或鏡像ASM磁盤組中,則此檔案也有丢失的嫌疑,在RMAN自動備份控制檔案時,會同時備份目前控制檔案和SPFILE。

1、使用自動備份還原SPFILE

  RMAN>set dbid xxx;

  RMAN>startup force nomount;

  RMAN>restore spfile from autobackup;

  RMAN>startup force;

2、使用自動備份還原控制檔案

  RMAN>startup nomount;

  RMAN>restore controlfile from autobackup;

  RMAN>alter database mount;

  RMAN>recover database;

  RMAN>alter database open resetlogs;

  如果初始化參數指定的控制檔案不可用,可以使用下述方法:

  RMAN>restore controlfile to '' from autobackup;

七、執行災難恢複

1、以NOARCHIVELOG模式執行恢複

  1)如果尚未關閉執行個體,請将其關閉

  2)使用作業系統指令,将所有資料檔案和控制檔案還原到原來的位置,如果原來的位置不可用,則将其還原到新的位置。

  3)如果還原的控制檔案位于新位置中,則更新已經還原的初始化參數檔案中的control_files參數。

  4)使用startup mount啟動資料庫。

  5)如果原來的位置不可使用,則使用alter database rename來更改資料檔案和聯機重做日志檔案的位置。

  6)運作recover database until cancel指令,模拟執行一個不完整恢複過程,重新設定聯機重做日志檔案:直接指定CANCEL。

  7)使用alter database open resetlogs打開資料庫。

2、以noarchivelog模式使用增量備份

  如果以noarchivelog模式運作資料庫,但是定期執行增量備份,則可以采用級别0增量備份,并應用級别1增量備份,将資料庫恢複到最近的增量備份時間點。增量備份必定是一緻的備份,也就是說,在資料庫處于mount狀态時進行備份。另外,必須使用normal、immediate或transactional關閉資料庫,以確定素有資料檔案和控制檔案都有同步的系統更改号SCN。

  startup force nomount;

  restore controlfile;

  alter database mount;

  restore database;

  recover database noredo;--丢失聯機日志時才需要使用noredo;

  alter database open resetlogs;

本文轉自 wws5201985 51CTO部落格,原文連結:http://blog.51cto.com/wws5201985/794299,如需轉載請自行聯系原作者