摘要:本文以公司管理和維護的一個全省社保數據庫為例,探討Oracle數據庫的恢復策略和技術,特別是基于時間點的不完全恢復技術,并闡述其實現(xiàn)過程。
關鍵詞:Oracle RAC數據庫;RMAN工具;不完全恢復;基于時間點
對于保證數據庫的安全來說,備份和恢復機制的應用一直被公認為是最為必須和重要的手段。但對于一般的用戶來說,對備份工作的重視要遠遠大于恢復,甚至有的DBA從來就沒有執(zhí)行過恢復測試的操作,對于不完全恢復的了解更是非常缺乏。實際上,恢復工作是對備份工作的驗證,不經過恢復測試的備份,很可能是無效的。因此,對數據庫恢復的演練和測試是每一個DBA的重要責任。
一、 ORACLE RAC恢復概述
ORACLE 恢復有多種類別,下面分別加以介紹:
1、實例恢復(Instance Recovery)
實例恢復是指在RAC中,當一個實例崩潰,則幸存的實例將自動使用聯(lián)機日志來前滾已提交的事務,撤銷未提交的事務并釋放鎖;謴偷倪^程是由Oracle 自動完成,無需人工干預。
2、崩潰恢復(Crash Recovery)
指在單實例或多實例環(huán)境中所有的實例發(fā)生崩潰。在崩潰恢復中,實例必須首先打開數據庫,然后執(zhí)行恢復操作。一般而言,在崩潰或關機退出之后第一個打開數據庫的實例將自動執(zhí)行崩潰恢復。
3、介質恢復(Media Recovery)
介質恢復通常為響應介質故障并根據用戶的命令來執(zhí)行恢復?梢允褂寐(lián)機或歸檔日志來使數據庫還原為最新或一個特定的時間點。介質恢復可以將整個數據庫、一個表空間一個數據文件還原至指定的時間點?杉毞譃橥耆謴秃筒煌耆謴。
(1)完全恢復
使用歸檔、聯(lián)機日志與數據庫、表空間或數據文件等的備份結合使用以將其更新至最新的時間點,沒有數據丟失。
(2)不完全恢復
使用歸檔、聯(lián)機日志與數據庫、表空間或數據文件等的備份結合使用以將其更新至過去的某個時間點或SCN等。
二、 RMAN不完全恢復
RMAN不完全恢復是指不完全的數據恢復,不完全恢復與完全恢復在許多方面是相同的,他們基本的命令集相同,但不完全恢復添加了一些其它命令。引起不完全恢復的原因有很多,如丟失了聯(lián)機重做日志或歸檔的重做日志,或者出現(xiàn)重大的用戶錯誤。 不完全恢復會影響整個數據庫,也就是說,不能只對數據庫的一部分執(zhí)行不完全恢復操作,因為這樣會使數據庫的一部分具有與這個數據庫其余部分不同的SCN和時間點,而導致數據庫不能正常打開。
要將數據庫數據還原到與數據庫剩余部分不同的時間點,可以用基于表空間時間恢復或者flashback技術。
不完全恢復方法包括:基于時間,日志序列,SCN或取消的恢復。
1、基于時間點的恢復
這種恢復類型允許用戶將數據庫恢復到與指定時間一致的狀態(tài)。當然,如果不存在能將數據庫還原到用戶請求的時間的有效備份或歸檔重做日志,Oracle 就會報RMAN-03002 和 RMAN-20207的錯誤。所以必須具備在我們指定的恢復時間之前生成有效的數據庫備份,此外還需要歸檔所有的的重做日志。
2、基于日志序列的恢復
RMAN 允許用戶將數據庫恢復到指定序列號的歸檔重做日志。如果歸檔的重做日志中存在間隙,使用這種恢復方法就非常方便。間隙通常意味著我們只能將數據庫還原到間隙的開始點。
3、基于SCN 的恢復
Oracle 允許用戶將數據庫恢復到指定的SCN,但這并不是一種常見的恢復方法。
三、基于時間點的不完全恢復
社保的系統(tǒng)由兩臺IBM750主機構成,安裝Oracle RAC 10G 作為高可用的解決方案,下面的操作是在這套數據庫中通過指定時間點來進行的不完全恢復。
1、確認RMAN已有數據庫文件的備份
在RAC中的一臺主機NODE1上登錄,先進入oracle用戶模式下,執(zhí)行rman命令,查看已有的備份。
(1)確認已有指定時間點前控制文件的備份。
RMAN> list backup of controlfile;
(2)確認已有指定時間點前數據文件的備份。
RMAN> list backup of database;
2、進行指定時間點的不完全恢復
(1)分別關閉并重啟兩個實例到nomount狀態(tài)
RMAN>shutdown immediate
RMAN>startup nomount
(2)restore控制文件,并指定需恢復時間點前的控制文件
RMAN> restore controlfile from ‘xxx’;
(3)在兩實例分別加載數據庫
RMAN> alter database mount;
(4)開始restore數據庫文件
RMAN> restore database ;
(5)將數據庫recover到誤操作時間點
RMAN>recover database until time 'xxx';
(6)使用只讀方式打開數據庫
RMAN> sql 'alter database open read only';
(7)查看數據庫被恢復表的內容
SQL>select * from xxx;
(8)在兩實例分別關閉數據庫并打開到加載狀態(tài)
RMAN> shutdown immediate
RMAN> startup mount
(9)以resetlogs方式加載并打開數據庫
在NODE1以resetlogs方式打開數據庫
RMAN> sql 'alter database open resetlogs';
在NODE2打開數據庫
RMAN>sql 'alter database open';
三、 總結:
Oracle數據庫RMAN基于時間點的不完全恢復技術,在用戶出現(xiàn)誤操作(例如:誤刪除、誤修改、誤截斷等)時,能夠快速恢復數據到指定的時間。但這種技術目前正逐漸被更快速和高效的Oracle Flashback替代。然而,F(xiàn)lashback也具有局限性,比如一種情況是Flashback所能恢復的最早時間點受到Flashback log所記錄的最早SCN的牽制,還有一種情況是當控制文件被恢復后,F(xiàn)lashback將不能使用。在以上幾種情況下,RMAN基于時間點的不完全恢復技術仍將是數據恢復方法中最好的選擇。
參考文獻:
[1] Oracle® Database Backup and Recovery Advanced User's Guide 10g Release 2 (10.2)
[2] Oracle® Database Oracle Clusterware and Oracle Real Application Clusters Administration and Deployment Guide 10g Release 2 (10.2)