使用RMAN的不完全恢復-基於時間/SCN/日誌序列

還不算暈發表於2013-10-11

不完全恢復是指不完全的資料恢復,不完全恢復與完全恢復在許多方面是相同的,他們基本的命令集相同,但不完全恢復新增了一些其他命令。 引起不完全恢復的原因有很多,如丟失了聯機重做日誌或歸檔的重做日誌,或者出現重大的使用者錯誤。 不完全恢復會影響整個資料庫,換句話,不能只對資料庫的一部分執行不完全恢復操作,因為這個會使資料庫的一部分具有與這個資料庫其餘部分不同的SCN和時間點。

要將資料庫資料還原到與資料庫剩餘部分不同的時間點,可以用基於 表空間時間恢復 或者用 閃回技術。

不完全恢復方法包括:基於時間,SCN,日誌序列 或取消的恢復。

1、使用resetlogslogs 命令

在不完全恢復期間,通常需要使用resetlogs命令開啟資料庫,這是因為我們要從已經簡歷的現有日誌流中脫離出來,並且需要向Oracle 說明這種情況. Resetlogs 命令表示一個資料庫邏輯生存期的結束和另一個資料庫邏輯生存期的開始. 資料庫的邏輯生存期也稱為一個對應物(Incarnation). 每次使用resetlogs命令都會建立一個新的資料庫對應物,這對於恢復操作來說非常重要.

每次使用resetlogs命令時,SCN 計數器不會被重置,不過Oracle 會重置其他計數器(如:日誌序列號),同時還會重置聯機重做日誌的內容.

Oracle 10g 簡化了通過resetlogs命令進行的恢復,在歸檔的重做日誌名中新增了一個新的特換串(%r),該字串表示resetlog ID 號。 在log_archive_dest_format 引數串中包括%r時,歸檔的重做日誌名在每個resetlogs 命令中保持唯一。 這種改動以及其他的內部Oracle 資料庫改動使oracle 可以很容易的通過給定的resetlogs操作恢復資料庫。 因此,可以很容易的在執行操作後立刻備份資料庫,然而,我們仍然認為在任何不完全恢復後備份資料庫是很有必要的。

2、建立恢復點

使用RMAN執行不完全恢復操作時需要完成一個工作是簡歷恢復目標。恢復目錄是恢復程式的終點,通常我們基於一個時間點,一個指定的SCN 或者 一個日誌序列號來表示它。 我們可以採用許多不同的方法建立恢復目標。

(1)在run 程式碼塊中使用set 命令與until time,until SCN 或 until sequence引數

Run

{

Set until time "to_date('2010-07-05 14:02:00','yyyy-mm-dd hh24:mi:ss')";

Restore database;

Recover database alter database open resetlogs;

}

執行這條命令時,RMAN 會查詢與恢復目標時間最近(並非恢復目標時間本身也不能是位於恢復目標之間的時間)的備份集,並且從這個備份集中還原資料庫。 如果資料庫置於noarchivelog 模式中,恢復操作會在備份集的時間停止;否則在執行recover命令期間,oracle 會在所定義的恢復目標(不包含恢復目標本身)上應用歸檔的重做日誌(以及需要應用的任何增量備份)。

注意: 如果嘗試恢復到特定備份的完成點,則必須恢復到備份集中檔案的CKP SCN 或 CKP TIME,在不同備份集的RMAN list命令中會列出這些內容。 有時使用備份的CKP TIME 並不夠,還可能導致ORA-1152錯誤。

(2)在restore 和recover 命令中直接使用until time,until SCN 和 until sequence 引數

這種方法避免使用run 程式碼塊,也傾向與使用這種方法。

Startup mount;

Restore database until time "to_date('2010-07-05 14:02:00','yyyy-mm-dd hh24:mi:ss')";

Recover database until time "to_date('2010-07-05 14:02:00','yyyy-mm-dd hh24:mi:ss')";

Alter database open resetlogs;

3、基於時間的恢復

這種恢復型別允許使用者將資料庫恢復到與指定時間一致的狀態。 當然,如果不存在能將資料庫還原到使用者請求的時間的有效備份或歸檔重做日誌,Oracle 就會報RMAN-03002 和 RMAN-20207的錯誤。

必須具備在我們指定的恢復時間之前生成的資料庫備份,此外還需要所有歸檔的重做日誌。

4、基於SCN 的恢復

Oracle 允許使用者將資料庫恢復到指定的SCN,實際上,這並不是一種常見的恢復方法。示例如下:

Startup mount;

Restore database until SCN 1000;

Recover database until SCN 1000;

Alter database open resetlogs;

注意: 該示例可以將資料庫還原到SCN 1000,但是不會包含SCN.

5、基於日誌序列的恢復

RMAN 允許使用者將資料庫恢復到指定序列號的歸檔重做日誌。如果歸檔的重做日誌中存在間隙,使用這種恢復方法就非常方便。 間隙通常意味著我們只能將資料庫還原到間隙的開始點。

Startup mount;

Restore database until sequence 100 thread 1;

Recover database until sequence 100 thread 1;

Alter database open resetlogs;

相關文章