RMAN備份與恢複 —— 完全恢複與不完全恢複
名詞解釋:
顧名思義,完全恢複就是指資料沒有丟失的恢複了。不完全恢複是指恢複後有部分資料丟失。它們是資料庫的兩種恢複方式。
完全恢複:利用重做日誌或增量備份將資料區塊恢複到最接近目前時間的時間點。之所以叫做完整恢複是由於Oracle應用了歸檔日誌和聯機重做日誌中所有的修改。 不完全恢複:利用備份產生一個非目前的版本的資料庫。換句話說,恢複過程中不會應用備份產生後產生的所有的重做日誌。 通常在下列情況下產生整個資料庫的不完整恢複 ● 介質失敗損壞了幾個或全部的聯機重做記錄檔; ● 使用者操作造成的資料丟失,比如,使用者誤刪除了一張表; ● 由於個別歸檔記錄檔的丟失無法進行完整的恢複; ● 丟失了當前的控制檔案,必須使用備份的控制檔案開啟資料庫。 為了執行不完整介質恢複,必須使用恢復點以前的備份來還原資料檔案,並在恢複完成後使用RESETLOG選項開啟資料庫。 resetlogs參數 在不完全恢複期間,通常需要使用resetlogs命令開啟資料庫,這是因為我們要從已經建立的現有重做日誌流中脫離出來。resetlogs參數表示一個資料庫邏輯生存期的結束了另一個資料庫邏輯生存期的開始。資料庫的邏輯生存期也稱為一個對應物(incarnation)。每次使用resetlogs命令時,SCN計數器不會被重設,但是Oracle會重設其他計數器(如記錄序號),同時還會重設聯機重做日誌的內容。 經過測試,當在非歸檔模式下嘗試執行完全恢複時,發出alter database open 後,RMAN會報如下錯誤: SQL> alter database open; alter database open * ERROR at line 1: ORA-01589: must use RESETLOGS or NORESETLOGS option for database open但是如果加上resetlogs,就不會報錯了。而且從恢複的過程來看,期間確實使用在聯機日誌文檔,也就是說它執行的是完全恢複。這說明在非歸檔模式下執行完全恢複後,開啟資料庫時也要重設重做日誌。其實這也很好想,非歸檔模式下,沒有歸檔的重作日誌,完全恢複時使用聯機日誌後,這些聯機記錄檔就沒什麼用了,因此Oracle就重設記錄檔序號(個人覺得:理論上來說,是可以不重設的,記錄檔的序號直接在現有的日誌序號上增加,但是這樣日誌序號會越來越大。Oracle應該是考慮到這一點就在非歸檔模式下執行完全恢複和不完全恢複時都重設了重做日誌)。 完全恢複 完全恢複很簡單,不多說,如下: $ rman target / ##登入rman工具,如果使用了catalog,則登陸方法rman targetsys/Oracle@lscatalogcata/cata@leo RMAN> startup mount ##必須為mount狀態,才能restore 和 recover 資料庫 RMAN> restore database; ##複製舊資料檔案覆蓋損壞的資料檔案 RMAN> recover database; ##資料檔案頭SCN號同步當前日誌中最後一個SCN號【完全恢複】 RMAN> alter database open [resetlogs]; 不完全恢複 不完全恢複有一個核心要領需要牢記:不完全恢複影響的是整個資料庫,不能只對資料庫的一部分執行不完全恢複。不完全恢複使用的方法通常有:基於時間、SCN、日誌序列、還原點或基於刪除的恢複。 $ rman target / RMAN> startup mount RMAN>run 2> {
3> set until time "to_date('07/01/2015 15:00:00', 'mm/dd/yyyy hh24:mi:ss')";
4> restore database;
5> recover database;
6> alter database open;
7> } 從執行過程來看,不完全恢複就是加了一個限制條件,時間/SCN等。如上基於時間點的恢複,Oracle會尋找目標恢復之前並與恢復最近的備份組。如果沒有找到可用的備份組,就會報錯。
--------------------------------------推薦閱讀 --------------------------------------
RMAN 配置歸檔日誌刪除策略
Oracle基礎教程之通過RMAN複製資料庫
RMAN備份策略制定參考內容
RMAN備份學習筆記
OracleDatabase Backup加密 RMAN加密
--------------------------------------分割線 --------------------------------------