1、唯讀資料表空間的恢複
在預設情況下,即使丟失了唯讀資料檔案,RMAN也不會在執行完全恢複資料庫還原操作時還原唯讀資料檔案。 要在完全恢複期間還原唯讀資料檔案,就必須在restore 命令中使用check readonly 參數,如:
Restore database check readonly;
注意,執行recover tablespace或recover datafile命令時,RMAN的工作情況是不一樣的。 使用這兩個命令時,不管資料表空間是否為唯讀狀態都會執行恢複操作。
2、歸檔重做日誌的還原
在使用RMAN的普通恢複過程中,不必恢複歸檔的重做日誌。 不過,偶爾也會要求還原一個或多個歸檔的重做日誌。 例如,我們可能需要使用LogMiner 在備份中儲存的歸檔重做記錄檔裡尋找一些資訊。
Restore archivelog all;
Restore archivelog from logseq=20 thread=1;
Restore archivelog from logseq=20 until logseq=30 thread=1;
還可以將歸檔的重做日誌還原到預設位置以外的位置上:
Run
{
Set archivelog destination to "d:/arch";
Restore archivelog all;
}
注意:1. 上例中的set 命令沒有替代方法,必須要求使用set。
2. 如果RMAN 認為一個歸檔的重做日誌已存在,就不會在磁碟上還原這個歸檔的重做日誌,即使設定的還原位置不同與預設的歸檔日誌位置,Oracle 也不會在這個新的位置上恢複歸檔的重做日誌。
3、資料檔案副本的還原
可以從資料檔案副本(不是備份組)中還原資料庫的資料檔案。 要實現這個功能,需要先使用restore from datafilecopy命令,然後再使用恢複資料庫(或資料表空間,資料檔案)的recover。
RMAN>Restore (datafile 5) from datafilecopy; -- 此處的圓括弧是必須的,如果沒有就報錯
RMAN>Recover datafile 5;
SQL>Alter database datafile 5 online;
執行restore 時,該命令會識別需要還原的資料檔案的最新副本,然後從這個副本中還原這些資料檔案。 資料檔案的最新副本可能是在一個資料檔案副本中,而不是在一個副本中。 在這種情況下,Oracle 會恢複這個資料檔案副本。
4、恢複訛誤的資料區塊
即使與訛誤資料區塊關聯的資料檔案一直聯機,也可以通過用塊介質恢複(block Media recover: BMR)執行塊層級恢複操作來修複Oracle 資料庫中的這些邏輯上或者物理上的訛誤資料區塊。
一般出現資料區塊錯誤時,都會有錯誤訊息:
ORA-01578: ORACLE data block corrupted (file #18,block #88)
如果沒有BMR時,我們必須從一個備份中恢複這個資料檔案,在恢複過程中,使用者不能使用該資料區塊檔案中的所有資料。
用BMR恢複就很簡單,只需要執行blockrecover命令即可:
Blockrecover datafile 18 block 88;
如果有必要,可以同時恢複多個資料檔案的多個資料區塊。如:
Blockrecover datafile 18 block 16,17,88,108;
Blcokrecover datafile 18 block 88 datafile 19 blcok 188;
Oracle 會跟蹤在備份和恢複期間發生的資料區塊訛誤。如果檢測到備份或複製操作出現訛誤,由於Oracle 不允許在備份中出現訛誤,所有這個備份就會失敗。 當然,可以配置RMAN允許一定數量的訛誤,但是不推薦這種用法。
可以使用backup validate database 命令查看RMAN 檢測到的所有資料庫訛誤。這條命令會在v$backup_corruption 和v$database_block_corruption視圖中填充檢測到的所有訛誤資料區塊。 如果訛誤發生在複製操作期間,v$copy_corruption視圖就會指明包含訛誤的備份組。
注意的是:v$backup_corruption 是一個顯示曆史訛誤的視圖,v$database_block_corruption 則是一個顯示當前資料區塊訛誤的視圖。 一旦修正了資料庫的塊訛誤,就需要重新運行backup validate database命令,然後查詢v$database_block_corruption 視圖以確保不存在其他訛誤。
查詢v$database_block_corruption視圖可以查看訛誤資料區塊的詳細資料。 如下所示,使用具有corruption list restore 參數的blockrecover命令可以方便地修正v$database_block_corruption 視圖中的訛誤資料區塊。
Blockrecover corruption list restore until time 'SYSDATE-5';
這條命令將還原訛誤列表中最近5天的所有訛誤資料區塊。 在上面的命令中,還可以使用until time 和 until sequence.
5、恢複前一個對應物
一個資料庫的對應物(incarnation)對應這個資料庫的特定邏輯生存期。 有時我們需要使用上次執行resetlogs命令開啟資料庫前產生的一個備份來還原資料庫,或者可能需要還原到執行上一個resetlogs命令之前的時間點。 這就需要用到incarnation.
5.1 使用恢複目錄恢複前一個對應物
先假設使用恢複目錄執行了備份操作,並且最近使用了resetlogs命令執行過時間點恢複,現在需要使用執行resetlogs命令之前的一個備份來恢複資料庫。
操作步驟:
(1)啟動但不載入執行個體,這是因為我們要先得到一個與恢複資料庫對應物關聯的控制檔案
(2)使用reset database to incarnation 命令為RMAN 指示對應物的備份組。
(3)Restore controlfile,使rman還原最新的控制檔案
(4)載入資料庫
(5)Restore 資料庫
(6)Recover 資料庫
(7)使用resetlogs 開啟資料庫
樣本如下:
C:/Users/Administrator.DavidDai>rman target / catalog rman/rman@orcl;
復原管理員: Release 11.2.0.1.0 - Production on 星期二 7月 6 10:31:40 2010
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
串連到目標資料庫: ORCL (DBID=1247395743)