這些年來,Oracle數(shù)據(jù)庫(kù)備份和恢復(fù)方式已經(jīng)發(fā)生了重大變化,特別是在Recovery ManagerRMAN)功能有了進(jìn)一步改善之后。中培偉業(yè)《Oracle數(shù)據(jù)庫(kù)管理與性能調(diào)優(yōu)》培訓(xùn)專家賈老師在這里對(duì)沒有RMAN之前,以及有了RMAN之后,DBA如何備份數(shù)據(jù),以及RMAN如何改善這一過程進(jìn)行了詳細(xì)介紹。
賈老師介紹,很久之前的Oracle 5,那時(shí)候的備份是這么做的:關(guān)閉數(shù)據(jù)庫(kù),復(fù)制所有的相關(guān)文件,然后再次啟動(dòng)數(shù)據(jù)庫(kù)。這種備份方式屬于冷備份,因?yàn)閿?shù)據(jù)庫(kù)在備份發(fā)生時(shí)是不運(yùn)行的。這是能夠確保一致性的備份,一個(gè)DBA可以使用這個(gè)備份進(jìn)行回滾,通常不會(huì)有任何問題,但恢復(fù)卻是一個(gè)苦差事,而且只能在聯(lián)機(jī)恢復(fù)日志可用時(shí)才能進(jìn)行。
Oracle 6的發(fā)布,引發(fā)了數(shù)據(jù)庫(kù)備份的下一次進(jìn)化。它的恢復(fù)操作會(huì)改變向量,回滾段和表空間。這種備份是熱備份,在線備份也變得可用。
復(fù)制與指定表空間相關(guān)的文件,Oracle可以重建和恢復(fù)表空間。當(dāng)然archivelog也需要復(fù)制,為了“熱”備份整個(gè)數(shù)據(jù)庫(kù),上面所示的兩個(gè)命令需要在數(shù)據(jù)庫(kù)每個(gè)表空間中運(yùn)行。當(dāng)然這是數(shù)據(jù)庫(kù)相比之前版本來說的一個(gè)優(yōu)勢(shì),現(xiàn)在數(shù)據(jù)庫(kù)可以繼續(xù)運(yùn)行,而與此同時(shí)備份也在進(jìn)行。不過,這是一個(gè)手動(dòng)過程,需要DBA編寫腳本。整個(gè)數(shù)據(jù)庫(kù)必須重建和恢復(fù),表空間的時(shí)間點(diǎn)恢復(fù)并不可用。
進(jìn)入Oracle 8,備份和恢復(fù)得到了進(jìn)一步改進(jìn)。表空間時(shí)間點(diǎn)恢復(fù),增量備份,并行備份和恢復(fù)都是可用的。這也是首次引入Recovery Manager概念的版本,但由于處于早期階段,因此其帶來的問題甚至比解決的還有多,所以沒有其并未被廣泛采用。
Oracle 8提供的兩個(gè)較大的改進(jìn)是表空間時(shí)間點(diǎn)恢復(fù)和增量備份,這兩個(gè)功能是緊密相關(guān)的。正是因?yàn)樵隽總浞莨δ艿拇嬖冢瑫r(shí)間點(diǎn)恢復(fù)才能夠使用。以后再也沒有必要一次次的執(zhí)行完整備份。在一個(gè)星期內(nèi)執(zhí)行一次完整備份就夠了,用增量備份自上次完全備份后保存所做的更改來完成之前的完整備份的功能就足夠了。的確,現(xiàn)在需要使用兩種備份來完全恢復(fù)和重建一個(gè)數(shù)據(jù)庫(kù),但增量備份文件比完整備份要小得多,這使得Oracle數(shù)據(jù)庫(kù)可以被恢復(fù)至任何執(zhí)行過增量備份的時(shí)間點(diǎn)。不僅可以恢復(fù)和重建數(shù)據(jù)庫(kù),也可以克隆數(shù)據(jù)庫(kù)在某一時(shí)間點(diǎn)的內(nèi)容盡管這一過程在當(dāng)時(shí)來說比現(xiàn)在更復(fù)雜。要記住,RMAN并不是非常可靠,所以DBA不準(zhǔn)備放棄他們的備份腳本以支持這種新的備份和恢復(fù)技術(shù)。
Oracle 9迎來了一個(gè)更可靠的Recovery Manager,更多的DBA愿意使用RMAN,測(cè)試其功能。它提供給DBA的用于創(chuàng)建完整和增量備份的接口更為可靠,使用其恢復(fù)和重建一個(gè)數(shù)據(jù)庫(kù)也更為簡(jiǎn)單。
Oracle 1011繼續(xù)改進(jìn)RMAN,提高其可靠性,前者采用自動(dòng)存儲(chǔ)管理(ASM),將其集成到RMAN中,更好地管理數(shù)據(jù)庫(kù)空間,后者提供了從當(dāng)前目標(biāo)數(shù)據(jù)庫(kù)備份或一個(gè)運(yùn)行中的目標(biāo)數(shù)據(jù)庫(kù)創(chuàng)建克隆的功能。系統(tǒng)網(wǎng)絡(luò)帶寬支持這樣的操作,進(jìn)行最新的克隆是完全可能的。當(dāng)然,克隆將永遠(yuǎn)不會(huì)完全同步運(yùn)作中的數(shù)據(jù)庫(kù),相對(duì)于最近的事務(wù),克隆需要保持一致性,這時(shí)候恢復(fù)將會(huì)停止,但克隆運(yùn)行中的數(shù)據(jù)庫(kù)將允許近期事務(wù)在克隆開始時(shí)繼續(xù)運(yùn)行。所有這一切是可以使用RMAN提供的接口來進(jìn)行,可以從本地O/ S調(diào)度器執(zhí)行腳本。Oracle12延伸了這些改進(jìn),讓RMAN可以從一個(gè)RMAN備份集中恢復(fù)和重建單個(gè)表,這是一個(gè)曾經(jīng)在老版本中被歸入expimp范疇的任務(wù),在9i R2以后的版本中,其被歸入expdpimpdp范疇。
“時(shí)間不等人。”這句話用在Oracle為了提高數(shù)據(jù)庫(kù)備份,恢復(fù)和重建的能力,而給數(shù)據(jù)庫(kù)備份和恢復(fù)帶來的變化上再合適不過。以往那些執(zhí)行手動(dòng)腳本,關(guān)閉數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)備份,數(shù)據(jù)庫(kù)運(yùn)行中必須顯式地備份每個(gè)單獨(dú)的表空間的日子一去不復(fù)返了。RMAN現(xiàn)在是一個(gè)“日常”用字如果你的日常工作是運(yùn)行Oracle數(shù)據(jù)庫(kù)上的數(shù)據(jù)中心,手動(dòng)腳本等其他任何類型的備份不再是必要的。RMAN很容易實(shí)現(xiàn)可靠的備份,DBA已將該技術(shù)視為理所當(dāng)然。但是,正如這里介紹的,從最早版本Oracle開始,備份和恢復(fù)已經(jīng)走了很長(zhǎng)的路,DBA的世界里應(yīng)該對(duì)這樣的變化感到欣喜,盡管他們可能還沒意識(shí)到。