Oracle備份面臨的挑戰(zhàn)
在傳統(tǒng)企業(yè)里,經(jīng)常會(huì)用Oracle數(shù)據(jù)庫(kù)去承載業(yè)務(wù)重要核心數(shù)據(jù),同時(shí)Oracle針對(duì)不同的恢復(fù)場(chǎng)景提供了靈活多樣的恢復(fù)操作方法,靈活的設(shè)計(jì)給備份和恢復(fù)帶來(lái)了更多的復(fù)雜性,因此Oracle的備份管理相比于MySQL而言,對(duì)DBA在專業(yè)性上有更高的要求。
比如說(shuō),Oracle環(huán)境有多種:Standalone,Standalone+DataGuard,RAC,RAC+DataGuard,雙機(jī)Oracle等,其中DataGuard還有多種運(yùn)行模式,不同的Oracle環(huán)境的備份有一些細(xì)微差別,一個(gè)備份腳本很難同時(shí)滿足這些場(chǎng)景,如果業(yè)務(wù)系統(tǒng)有多套Oracle環(huán)境,備份將會(huì)非常復(fù)雜,例如如何確保全量備份集總是有效的(可恢復(fù)的)等等。我們現(xiàn)在以一個(gè)具體的案例來(lái)說(shuō)明這個(gè)問(wèn)題:一致性全量備份。
一致性全量備份
何為一致性全量備份
在我們這篇文章里"一致性全量備份"的定義如下:
條件1:備份集中存在一個(gè)連續(xù)完整的歸檔日志序列,其開(kāi)始SCN和結(jié)束SCN能夠覆蓋備份開(kāi)始時(shí)的最小的數(shù)據(jù)文件checkpoint SCN和備份結(jié)束時(shí)最大數(shù)據(jù)文件SCN(只讀和離線數(shù)據(jù)文件除外)。
條件2:備份集中包含恢復(fù)所用的全部數(shù)據(jù)文件,控制文件和參數(shù)文件。
條件3:備份集中包含盡可能新的歸檔日志。
條件1和2確保全量備份集的完整性,使得備份集可以獨(dú)立的被恢復(fù)(恢復(fù)出一致的狀態(tài))。條件3可以確保全量備份集始終是最新的,不會(huì)出現(xiàn)“丟數(shù)據(jù)”的場(chǎng)景。滿足上述條件的備份集叫做一致性全量備份集。
一致性全量備份的好處
一致性全量備份集有哪些好處呢?
方便轉(zhuǎn)儲(chǔ):通常一個(gè)備份集是一個(gè)存儲(chǔ)目錄,簡(jiǎn)單的打包就可以轉(zhuǎn)儲(chǔ)到磁帶,異地轉(zhuǎn)儲(chǔ)。
簡(jiǎn)化恢復(fù):恢復(fù)時(shí)不依賴其他備份集,例如定時(shí)歸檔日志備份產(chǎn)生的備份集失效了不會(huì)影響全量備份集的有效性,一致性全量備份集總是可以獨(dú)立的恢復(fù)。
一致性全量備份的難點(diǎn)
下面我們看一下在哪些場(chǎng)景中,我們有可能得不到一致性全量備份集,圖1 中的case2-case5就是典型的非一致性全量備份。
在【case2】中缺失了部分的歸檔日志,違反了【條件1】中連續(xù)完整的歸檔日志序列這個(gè)條件。如 圖2 所示,如果Primary和Standby之間網(wǎng)絡(luò)出現(xiàn)了異常,此時(shí)主庫(kù)可以正常地生成新的歸檔日志,但是Standby上將無(wú)法生成新的歸檔日志,當(dāng)網(wǎng)絡(luò)恢復(fù)后,DataGuard會(huì)從Primary上自動(dòng)同步最新的歸檔日志,同時(shí)也會(huì)同步這部分缺失的歸檔日志,但是如果在執(zhí)行全量備份期間,缺失的歸檔日志還沒(méi)有被同步到Standby上,那么此時(shí)的全量備份集中的歸檔日志將會(huì)包含空洞,導(dǎo)致無(wú)法恢復(fù)。
在【case3】中歸檔日志的的最小SCN和數(shù)據(jù)文件最小SCN之間存在gap。圖2 中的所有運(yùn)行模式都有可能出現(xiàn)這個(gè)問(wèn)題,例如用戶在清理Standby上的歸檔日志時(shí)執(zhí)行了delete force就會(huì)導(dǎo)致RMAN將那些還沒(méi)有被應(yīng)用的歸檔日志刪除掉。
在【case4】中最新的歸檔日志SCN和最大的數(shù)據(jù)文件SCN存在gap。圖2 中的【模式三】有可能出現(xiàn)這個(gè)問(wèn)題,因?yàn)樗窍韧絩edo到Standby的redo log file中,當(dāng)主庫(kù)執(zhí)行Switch log之后,Standby上才會(huì)將redo log file歸檔到歸檔日志。如果Primary和Standby之間網(wǎng)絡(luò)出現(xiàn)了問(wèn)題,那么Primary依然能夠正常生成歸檔日志,但是備庫(kù)卻不能執(zhí)行redo log file的切換,不能生成新的歸檔日志,導(dǎo)致歸檔日志的SCN小于數(shù)據(jù)文件的最大SCN。相反,【模式一】和【模式二】則一定不會(huì)出現(xiàn)這種case,因?yàn)樗麄兪窍犬a(chǎn)生歸檔日志,然后再應(yīng)用歸檔日志到數(shù)據(jù)文件,因此其歸檔日志最大SCN一定是大于等于數(shù)據(jù)文件最大SCN的。
在【case5】中備份集中丟失了部分的數(shù)據(jù)文件,例如,用戶開(kāi)啟了(backup optimization)配置,此時(shí)RMAN會(huì)開(kāi)啟備份優(yōu)化功能,如果某些文件或者歸檔日志被其他人備份過(guò)了,那么將不會(huì)再次備份。
在【條件2】中, 如果Primary上的歸檔日志或者Redo長(zhǎng)時(shí)間無(wú)法同步到Standby上,此時(shí)可能能夠得到滿足【case1】的全量備份,既此時(shí)的備份是成功的,也能夠獨(dú)立的恢復(fù),但是該全量備份沒(méi)有包含主庫(kù)最新的歸檔日志,導(dǎo)致我們的備份不是最新有效的全量備份。
由于Primary和Standby的運(yùn)行原理不一樣,在實(shí)際業(yè)務(wù)實(shí)現(xiàn)時(shí),會(huì)遇到更多的穩(wěn)定性問(wèn)題,實(shí)現(xiàn)一致性全量備份需要解決如下幾個(gè)問(wèn)題:
如何防止Standby上的備份獲取不到最新的Primary的Redo日志。
當(dāng)Primary和Standby之間網(wǎng)絡(luò)延遲較大或者出現(xiàn)網(wǎng)絡(luò)分區(qū),導(dǎo)致Redo傳輸太慢或者長(zhǎng)時(shí)間無(wú)法傳輸時(shí),備份如何解決。
如何發(fā)現(xiàn)Primary或者Standby上的歸檔日志出現(xiàn)了gap,以及如何解決gap。
如何避免備份的數(shù)據(jù)文件或者歸檔日志出現(xiàn)損壞的數(shù)據(jù)塊。
此外,在備份的過(guò)程中,您可能還要考慮如下一些問(wèn)題:
定時(shí)的清理已經(jīng)備份過(guò)的歸檔日志。
防止備份數(shù)據(jù)中毒/惡意刪除,確保任何時(shí)候都至少有一個(gè)可用的備份集用來(lái)做恢復(fù)。
為了滿足監(jiān)管要求,實(shí)現(xiàn)備份數(shù)據(jù)的多地域存儲(chǔ)。
DBS Oracle 備份
上述的兩個(gè)舉例展示了Oracle備份的復(fù)雜性和較高的技術(shù)難度。而對(duì)于以上提出的問(wèn)題,DBS結(jié)合阿里巴巴之前多年的Oracle生產(chǎn)和運(yùn)維經(jīng)驗(yàn)通過(guò)完全自主研發(fā),打造了DBS Oracle備份產(chǎn)品,幫助阿里云客戶方便低成本地備份和保護(hù)Oracle數(shù)據(jù)資產(chǎn)。
如圖3,DBS Oracle 備份與恢復(fù)采用 Oracle 內(nèi)置的 RMAN 技術(shù),實(shí)現(xiàn) Oracle 數(shù)據(jù)庫(kù)的熱備份和恢復(fù)。備份管理員在 DBS控制臺(tái) 簡(jiǎn)單配置備份策略,系統(tǒng)會(huì)根據(jù)用戶配置的備份策略自動(dòng)地創(chuàng)建數(shù)據(jù)備份任務(wù),DBS系統(tǒng)向Oracle宿主機(jī)DBS備份客戶端發(fā)送備份命令,DBS備份客戶端執(zhí)行RMAN備份腳本,流式無(wú)入侵地讀取備份數(shù)據(jù),并對(duì)數(shù)據(jù)執(zhí)行壓縮/加密等處理,最后將備份數(shù)據(jù)寫(xiě)入到云上加密的備份存儲(chǔ)。整個(gè)備份過(guò)程不侵占用戶本地磁盤空間和IO,對(duì)數(shù)據(jù)庫(kù)完全無(wú)入侵。而對(duì)于數(shù)據(jù)恢復(fù)任務(wù),備份管理員在 DBS控制臺(tái) 點(diǎn)擊發(fā)起恢復(fù)任務(wù),此時(shí)DBS調(diào)度會(huì)向在Oracle宿主機(jī)上的 DBS備份客戶端 發(fā)送恢復(fù)命令,DBS備份客戶端 執(zhí)行對(duì)應(yīng)的RMAN腳本進(jìn)行數(shù)據(jù)恢復(fù)。
基礎(chǔ)能力
它在當(dāng)前版本具備的技術(shù)特點(diǎn)如下:
完全自研:阿里巴巴之前是Oracle的使用大戶,結(jié)合之前阿里集團(tuán)對(duì)Oracle生產(chǎn)運(yùn)維的經(jīng)驗(yàn)完全自研打造Oracle備份恢復(fù)產(chǎn)品,以幫助用戶實(shí)現(xiàn)低成本探索數(shù)據(jù)庫(kù)及數(shù)據(jù)庫(kù)備份國(guó)產(chǎn)化演進(jìn)路徑。
兼容的平臺(tái):支持Linux平臺(tái)下的Oracle保護(hù)。
支持的數(shù)據(jù)庫(kù)版本:10g/11g/12c/18c/19c。
支持的備份類型:全量備份和事務(wù)日志備份。
支持的備份粒度:實(shí)例。
備份對(duì)象:日志文件,控制文件,參數(shù)文件,數(shù)據(jù)文件。
加密情況:傳輸過(guò)程支持HTTPS加密,存儲(chǔ)支持AES256,BYOK加密
支持的恢復(fù)粒度:Oracle單機(jī)恢復(fù)粒度包括:數(shù)據(jù)庫(kù)實(shí)例(全庫(kù)恢復(fù))。
支持的恢復(fù)方式:支持原機(jī)異實(shí)例,異機(jī)原位置的指定任意時(shí)間點(diǎn)的恢復(fù)。
RAC 恢復(fù)到單機(jī):當(dāng) Oracle RAC 環(huán)境損壞時(shí),支持將 Oracle RAC 恢復(fù)到單機(jī)環(huán)境中。
歸檔日志刪除策略:基于備份成功次數(shù),支持自動(dòng)刪除指定時(shí)間段內(nèi)已備份的Oracle 歸檔日志,避免因歸檔日志過(guò)滿影響數(shù)據(jù)庫(kù)運(yùn)行。
多通道:開(kāi)啟多通道備份可提高備份效率。用戶可為根據(jù)數(shù)據(jù)文件和日志文件的存儲(chǔ)量以及業(yè)務(wù)壓力情況分別自定義通道數(shù)量,并行讀取傳輸數(shù)據(jù),從而充分利用磁盤 I/O。
數(shù)據(jù)庫(kù)高級(jí)壓縮:開(kāi)啟數(shù)據(jù)庫(kù)高級(jí)壓縮后,可以在備份過(guò)程中對(duì)備份數(shù)據(jù)進(jìn)行壓縮, 節(jié)省磁盤空間,提升傳輸效率。
無(wú)入侵:整個(gè)備份恢復(fù)過(guò)程,對(duì)源庫(kù)無(wú)入侵,不依賴本地磁盤做中轉(zhuǎn)。
它還在持續(xù)迭代中,歡迎持續(xù)關(guān)注。
差異點(diǎn)
為什么要備份上云?
DBS Oracle備份是云技術(shù)和備份技術(shù)的結(jié)合,它不僅實(shí)現(xiàn)了傳統(tǒng)的Oracle備份的能力(如上所述),而且在使用DBS云備份時(shí):
天然實(shí)現(xiàn)6個(gè)9的備份存儲(chǔ)穩(wěn)定性:備份數(shù)據(jù)存儲(chǔ)在阿里云OSS對(duì)象存儲(chǔ)上,SLA達(dá)到6個(gè)9
天然實(shí)現(xiàn)同地域多機(jī)房容災(zāi):備份數(shù)據(jù)按照多機(jī)房高可用容災(zāi)
低成本實(shí)現(xiàn)異地備份:
網(wǎng)絡(luò)帶寬:阿里云內(nèi)部網(wǎng)絡(luò)更高的帶寬,更低的網(wǎng)絡(luò)延遲,費(fèi)用更低,可以實(shí)現(xiàn)更低的異地災(zāi)備RPO
恢復(fù)機(jī)器:相比于傳統(tǒng)的數(shù)據(jù)備份保護(hù)方案,需要提前額外購(gòu)買恢復(fù)用的機(jī)器資源。在DBS只需要在恢復(fù)時(shí)只需要按量付費(fèi)通過(guò)DBS一鍵恢復(fù)到RDS,或者是通過(guò)DBS沙箱實(shí)例秒級(jí)拉齊臨時(shí)恢復(fù)實(shí)例即可。
云備份帶來(lái)更多
上云之后,DBS和云上眾多云產(chǎn)品深度結(jié)合,提供了以下等能力,幫用戶盤活沉寂的備份數(shù)據(jù),降低用戶TCO:
數(shù)據(jù)湖分析:相比于傳統(tǒng)備份備份數(shù)據(jù)只能在恢復(fù)時(shí)使用而言,DBS與云上產(chǎn)品DLA(數(shù)據(jù)湖分析)深度結(jié)合,無(wú)需恢復(fù)則能提供邏輯備份數(shù)據(jù)的數(shù)據(jù)湖分析能力;
副本數(shù)據(jù)管理CDM:DBS與DAS、DMS,RDS等數(shù)據(jù)庫(kù)產(chǎn)品深度整合,對(duì) 備份數(shù)據(jù) 提供 CDM(副本數(shù)據(jù)管理)能力,可以實(shí)現(xiàn)對(duì)物理備份秒級(jí)恢復(fù),可以讓用戶基于備份數(shù)據(jù)實(shí)現(xiàn)devops及分析能力,大大提高數(shù)據(jù)資產(chǎn)的使用效率,降低TCO。
Oracle副本數(shù)據(jù)管理(CDM)
傳統(tǒng)的數(shù)據(jù)恢復(fù)時(shí)間主要取決于數(shù)據(jù)的下載時(shí)間以及歸檔日志應(yīng)用時(shí)間。恢復(fù)時(shí)間通常在小時(shí)級(jí)別。DBS Oracle 備份利用DBS存儲(chǔ)的快照克隆掛載等技術(shù),以及云實(shí)例的彈性生產(chǎn)能力,可以實(shí)現(xiàn)Oracle副本數(shù)據(jù)管理,讓用戶可以在幾秒鐘之內(nèi)恢復(fù)出一個(gè)1TB的Oracle實(shí)例,幫助用戶快速實(shí)現(xiàn)應(yīng)急容災(zāi),恢復(fù)演練,DevOps等需求。
為實(shí)現(xiàn)Oracle CDM能力,需要以下的技術(shù)能力,如圖4:
全量備份+鏡像復(fù)制:DBS用流式掛載備份的方式,結(jié)合RMAN Image Copy備份方式實(shí)現(xiàn)byte by byte的數(shù)據(jù)文件無(wú)入侵拷貝。在恢復(fù)時(shí),通過(guò)流式掛載恢復(fù)的方式,可以直接用這份備份數(shù)據(jù)拉起Oracle數(shù)據(jù)庫(kù),無(wú)需再做大量的數(shù)據(jù)拷貝。
快照+克?。篋BS備份存儲(chǔ)的快速打快照的能力,幫助用戶打造不同時(shí)間點(diǎn)的Oracle備份數(shù)據(jù)的黃金副本。基于這些黃金副本以及對(duì)黃金副本的秒級(jí)克隆能力,可以幫助用戶在非常短的時(shí)間內(nèi)(秒級(jí))創(chuàng)建同一個(gè)時(shí)間點(diǎn)的Oracle沙箱實(shí)例,不同沙箱實(shí)例之間無(wú)干擾,幫助用戶實(shí)現(xiàn)DevOps,比如在Oracle沙箱實(shí)例上實(shí)現(xiàn)業(yè)務(wù)變更驗(yàn)證,業(yè)務(wù)壓測(cè),業(yè)務(wù)發(fā)布測(cè)試等等。
總結(jié)
DBS Oracle備份產(chǎn)品是阿里云自研的,結(jié)合阿里集團(tuán)之前多年Oracle數(shù)據(jù)庫(kù)的生產(chǎn)使用經(jīng)驗(yàn)打造的云備份產(chǎn)品。它不僅提供了傳統(tǒng)備份所提供的Oracle備份能力外,還實(shí)現(xiàn)了無(wú)入侵流式備份能力,同時(shí)和云以及眾多云產(chǎn)品深度結(jié)合,在備份數(shù)據(jù)上提供數(shù)據(jù)湖分析,并通過(guò)副本數(shù)據(jù)管理(CDM)技術(shù)提供Oracle秒級(jí)恢復(fù)及devops能力。