一次緊急數(shù)據(jù)庫恢復(fù)帶來的數(shù)據(jù)庫備份策略
某日,接到一個(gè)CASE,說數(shù)據(jù)庫兩臺(tái)服務(wù)器電源同時(shí)損壞,已經(jīng)不能使用,要求在第二天上班前恢復(fù)所有的數(shù)據(jù)庫,趕到現(xiàn)場已經(jīng)晚上12點(diǎn)了,首先了解了一下該學(xué)校的數(shù)據(jù)庫情況:
- 數(shù)據(jù)庫的操作系統(tǒng)為Solaris的操作系統(tǒng)。
- 數(shù)據(jù)庫的備份只有Rman的備份,并且放在存儲(chǔ)上。
萬幸的是現(xiàn)場有一臺(tái)可供恢復(fù)的小型機(jī)并且有識(shí)別該小型機(jī)的光纖卡。
首先在可供恢復(fù)的小型機(jī)上接上光纖存儲(chǔ)卡并且可以認(rèn)到存儲(chǔ)上數(shù)據(jù)庫rman備份,然后安裝好數(shù)據(jù)庫軟件后,將數(shù)據(jù)庫的數(shù)據(jù)恢復(fù),在將數(shù)據(jù)庫打開。整個(gè)過程大概用時(shí)5小時(shí)以上。
根據(jù)上述的案例,下面我就來跟大家討論一下備份方案的制定:
1、最早希望恢復(fù)到什么時(shí)間點(diǎn)
對于用戶,用戶只關(guān)注數(shù)據(jù)庫當(dāng)前狀態(tài)是否正常,至于數(shù)據(jù)曾經(jīng)做過什么操作,什么時(shí)間做的并不重要;也有些業(yè)務(wù)類型可能會(huì)由于特殊的需求,希望看到之前曾經(jīng)做過的操作,甚至要將數(shù)據(jù)庫恢復(fù)到之前的某個(gè)時(shí)間點(diǎn)。這兩種需求主要與備份的保留策略有關(guān)。對于前者,一般建議選擇基于冗余數(shù)量的備份保留策略,如果只希望保證數(shù)據(jù)庫穩(wěn)定運(yùn)行,那么可視數(shù)據(jù)規(guī)模的大小,適當(dāng)保存幾份最近的備份即可。
為什么要保存最近的幾份,一份不就行了嗎?
備份本身就是在做冗余,那么從可靠的角度考慮,對于備份當(dāng)然也要有冗余,至少要保證有兩份備份嘛,這樣即使由于某些原因損壞了一份,還能有個(gè)替補(bǔ)的。像上述案例中一樣,只有一份的備份其實(shí)是很危險(xiǎn)的,如果出現(xiàn)異常情況,萬一數(shù)據(jù)不能恢復(fù),那造成的損失就無法估量了。當(dāng)然,份數(shù)的多少?zèng)Q定需要的磁盤空間會(huì)成倍增加,需要根據(jù)磁盤的容量大小來決定所需要保留的備份份數(shù)。
如果不僅要看到,還要能將數(shù)據(jù)恢復(fù)到之前的某個(gè)時(shí)間點(diǎn),那么就必須要保證存在目標(biāo)時(shí)間點(diǎn)(或之前)創(chuàng)建的備份,以及相關(guān)的歸檔文件?;谶@類需求建議選擇基于冗余時(shí)間的備份保留策略,備份的保留時(shí)間設(shè)置為最早恢復(fù)到的時(shí)間即可。
2、系統(tǒng)什么時(shí)間比較空閑
由于系統(tǒng)需要涉及大量數(shù)據(jù)的讀寫,這期間必然會(huì)占用較多的系統(tǒng)資源,如果在數(shù)據(jù)庫繁忙時(shí)段執(zhí)行備份任務(wù),那么不僅僅備份需要花費(fèi)較長時(shí)間,還有可能對正常運(yùn)行的業(yè)務(wù)系統(tǒng)造成影響。
我們目前通常的做法都是將備份的任務(wù)放到凌晨兩點(diǎn)執(zhí)行,對于大多數(shù)業(yè)務(wù),這個(gè)時(shí)間系統(tǒng)的訪問量最少,當(dāng)然個(gè)別學(xué)校如果對于自己的數(shù)據(jù)庫使用情況了解的話,可以提出要求在某一時(shí)刻進(jìn)行備份。
3、數(shù)據(jù)庫的數(shù)據(jù)規(guī)模有多大
雖然前面說不考慮硬件因素,不過備份操作本身,考慮到執(zhí)行效率的因素,想完全忽略硬件是不可能的,備份所需的時(shí)間還是建立在用戶使用獨(dú)立存儲(chǔ)的性能基礎(chǔ)上的。按照磁盤讀寫大概每秒百M(fèi)的速率計(jì)算,200GB左右數(shù)據(jù)執(zhí)行備份操作需要半個(gè)小時(shí)左右(對應(yīng)的恢復(fù)操作也差不多是這個(gè)時(shí)間,一般會(huì)更長,因?yàn)榛謴?fù)時(shí)還需要應(yīng)用重做日志),就備份操作來說,每天在系統(tǒng)不繁忙的時(shí)間分配幾個(gè)小時(shí)專門執(zhí)行,這個(gè)時(shí)間對于大多數(shù)應(yīng)用都還可以接受。所以我們給一般學(xué)校制定的備份策略為每周六進(jìn)行一次全備份,每天對歸檔日志進(jìn)行備份,當(dāng)每周六進(jìn)行全備后,刪除以前備份的歸檔日志。
4、預(yù)估可能給予的恢復(fù)操作時(shí)間
一般情況下正常的系統(tǒng)不會(huì)執(zhí)行恢復(fù)操作,當(dāng)需要對數(shù)據(jù)庫系統(tǒng)做恢復(fù)操作時(shí)就代表著系統(tǒng)中出現(xiàn)了問題,雖然說出現(xiàn)的問題可能是偶發(fā)性的,但處理問題所需要的時(shí)間有可能是確定的,比如數(shù)據(jù)量確定的情況下,恢復(fù)數(shù)據(jù)文件和應(yīng)用日志的時(shí)間是可以估算出來的。
對于某些核心的業(yè)務(wù)系統(tǒng),任何無公告通知的短暫停止服務(wù)甚至都是災(zāi)難,那么這種情況下,一旦出現(xiàn)重大問題,僅依靠RMAN想做到快速恢復(fù)是不可能的。所以需要數(shù)據(jù)庫管理員通過其他途徑確保系統(tǒng)的高可用性(例如在存儲(chǔ)層做鏡像或者做數(shù)據(jù)庫災(zāi)備等),而不能僅僅是依靠備份。
而有些非核心的業(yè)務(wù)系統(tǒng),可能每周甚至每個(gè)月只有某個(gè)時(shí)段需要用到(如選課系統(tǒng)),對于這類數(shù)據(jù)庫系統(tǒng),由于其執(zhí)行恢復(fù)的時(shí)間非常富裕,相對來說制訂備份策略時(shí)也就可以更寬松。比如并不需要每天都創(chuàng)建備份,而僅在有數(shù)據(jù)修改發(fā)生時(shí)執(zhí)行備份任務(wù)。
備份和恢復(fù)之間絕對不是各自孤立存在,恢復(fù)依賴于備份,備份策略基本上也就決定了恢復(fù)方式、能恢復(fù)的數(shù)據(jù)及恢復(fù)的效率等。因此備份策略的制訂要視你的恢復(fù)需求,以及恢復(fù)策略而定。
5、總結(jié):
對于如何制定數(shù)據(jù)庫的備份,我的建議是如果條件允許的情況下,可以在數(shù)據(jù)庫服務(wù)器本地與存儲(chǔ)上做一個(gè)Rman備份,如果是小型機(jī)系統(tǒng),建議除了做Rman備份(rman只能適用于同平臺(tái)之間的恢復(fù))外,還需要做一個(gè)邏輯方面的備份并且將這個(gè)備份放置在遠(yuǎn)程端。備份完成后,需要每隔一段時(shí)間(一般三個(gè)月)就要做一次全庫的恢復(fù)性測試以保證數(shù)據(jù)庫備份文件的可用。