一種達(dá)夢數(shù)據(jù)庫備份數(shù)據(jù)的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫備份方法,尤其是涉及一種達(dá)夢數(shù)據(jù)庫備份數(shù)據(jù)的方法。
【背景技術(shù)】
[0002]自棱鏡門事件發(fā)生以來,信息技術(shù)國產(chǎn)化的浪潮呼聲不斷高漲,繼微軟Windows8操作系統(tǒng)未入圍政府采購行列之后,從應(yīng)用、中間件到基礎(chǔ)軟件和硬件,幾乎所有層面的產(chǎn)品都在加速國產(chǎn)化進(jìn)程。2014年2月我國成立了中央網(wǎng)絡(luò)安全和信息化領(lǐng)導(dǎo)小組,習(xí)近平指出建設(shè)網(wǎng)絡(luò)強(qiáng)國要有自己的技術(shù),有過硬的技術(shù)。由此可見國家對國內(nèi)IT企業(yè)的支持力度。
[0003]國產(chǎn)數(shù)據(jù)庫廠商達(dá)夢推出了完全自主知識(shí)產(chǎn)權(quán)的高性能數(shù)據(jù)庫管理系統(tǒng)7.0版本,簡稱DM7。DM7支持第三方備份,提供了一套備份恢復(fù)相關(guān)的讀寫接口 DMSBT API。同時(shí),第三方實(shí)現(xiàn)DMSBT API動(dòng)態(tài)庫命名是強(qiáng)制的,在windows平臺(tái)下為dmsbtex.dll,其他非windows平臺(tái)(linux或unix平臺(tái))為libdmsbtex.so。把動(dòng)態(tài)庫部署在達(dá)夢的系統(tǒng)目錄bin下面,達(dá)夢備份恢復(fù)時(shí)會(huì)加載該動(dòng)態(tài)庫。
[0004]目前達(dá)夢數(shù)據(jù)庫的備份提供本地磁盤和磁帶兩種備份,第三方備份和達(dá)夢提供的磁帶備份使用相同的讀寫接口 DMSBT API。本地磁盤備份只是將數(shù)據(jù)備份到本地的磁盤,如果出現(xiàn)本地磁盤損壞、操作系統(tǒng)的崩潰等情況,備份的數(shù)據(jù)就丟失,不能保證數(shù)據(jù)的安全可靠;如果每次將備份的數(shù)據(jù)迀移到其他位置,這又花費(fèi)數(shù)據(jù)庫管理員的工作量。磁帶備份可以將數(shù)據(jù)備份到磁帶,給數(shù)據(jù)帶來比較安全可靠的存放位置,但磁帶的吞吐速度要弱于磁盤,而且磁帶的機(jī)械故障率比較高。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的是提供一種達(dá)夢數(shù)據(jù)庫備份數(shù)據(jù)的方法,一方面解決達(dá)夢備份到本地磁盤時(shí)出現(xiàn)數(shù)據(jù)不能安全、可靠的存儲(chǔ);另一方面解決達(dá)夢備份到磁帶時(shí)帶來備份恢復(fù)的吞吐慢問題,同時(shí)消除了因磁帶的故障率比較高,在發(fā)生數(shù)據(jù)災(zāi)難時(shí)無法恢復(fù)的尷尬。
[0006]本發(fā)明的目的可以通過以下技術(shù)方案來實(shí)現(xiàn):
[0007]—種達(dá)夢數(shù)據(jù)庫備份數(shù)據(jù)的方法,該方法通過SBT端與第三方備份端實(shí)現(xiàn)數(shù)據(jù)傳輸,包括以下步驟:
[0008]al)創(chuàng)建備份時(shí)間點(diǎn)對象,建立SBT端和第三方備份端的連接,創(chuàng)建數(shù)據(jù)庫實(shí)例對象;
[0009]a2) SBT端通過sbtbackup接口發(fā)送備份集,該備份集中包括若干備份片文件和一個(gè)該備份集的meta文件(元數(shù)據(jù)文件);
[0010]a3)第三方備份端接收備份集,在數(shù)據(jù)庫實(shí)例對象下創(chuàng)建相應(yīng)的備份片對象和meta文件對象,并記錄各備份片對象的備份片名;
[0011]a4)第三方備份端將接收到的備份片對象和meta文件對象分割為對應(yīng)的備份片數(shù)據(jù)塊對象和meta數(shù)據(jù)塊對象;
[0012]a5)第三方備份端將備份片數(shù)據(jù)塊對象和meta數(shù)據(jù)塊對象發(fā)送至數(shù)據(jù)存儲(chǔ)中心;
[0013]a6)備份完成后,釋放備份資源。
[0014]所述備份時(shí)間點(diǎn)對象記錄有當(dāng)前備份類型,且存儲(chǔ)于數(shù)據(jù)存儲(chǔ)中心。
[0015]所述備份片對象包括數(shù)據(jù)備份片對象和備份時(shí)生成的日志備份片對象。
[0016]該方法對應(yīng)的恢復(fù)方法具體為:
[0017]bl)獲取需恢復(fù)的時(shí)間點(diǎn)對象,建立SBT端和第三方備份端的連接;
[0018]b2)第三方備份端從數(shù)據(jù)存儲(chǔ)中心中獲取meta數(shù)據(jù)塊對象,恢復(fù)meta文件對象;
[0019]b3)恢復(fù)數(shù)據(jù)備份片對象:恢復(fù)meta文件對象,第三方備份端根據(jù)SBT端發(fā)送的待恢復(fù)的備份片名從數(shù)據(jù)存儲(chǔ)中心中獲取相應(yīng)的備份片數(shù)據(jù)塊對象,根據(jù)SBT端的數(shù)據(jù)接收長度對各備份片數(shù)據(jù)塊對象進(jìn)行組織后通過服務(wù)器管道發(fā)送給SBT端;
[0020]b4)恢復(fù)日志備份片對象;
[0021]b5)恢復(fù)完成后,釋放恢復(fù)資源。
[0022]所述建立SBT端和第三方備份端的連接具體為:
[0023]101)第三方備份端創(chuàng)建與SBT端交互的服務(wù)器管道,且該服務(wù)器管道處于等待狀態(tài);
[0024]102)創(chuàng)建備份線程啟動(dòng)備份或創(chuàng)建恢復(fù)線程啟動(dòng)恢復(fù);
[0025]103)通過服務(wù)器管道接收SBT端發(fā)送的初始化消息,實(shí)現(xiàn)連接。
[0026]所述步驟b3)中,每恢復(fù)一個(gè)備份片對象過程中都重新創(chuàng)建服務(wù)器管道。
[0027]與現(xiàn)有技術(shù)相比,本發(fā)明采用第三方備份,并將數(shù)據(jù)備份到數(shù)據(jù)存儲(chǔ)中心,數(shù)據(jù)存儲(chǔ)中心是異地的存儲(chǔ)介質(zhì),將磁盤做成軟Raid,在其基礎(chǔ)之上建卷管理磁盤,這樣既保證發(fā)生數(shù)據(jù)災(zāi)難時(shí)快速恢復(fù),也保證了數(shù)據(jù)的安全性、可靠性,具有以下有益效果:
[0028]1.該方法滿足備份廠商一般備份達(dá)夢數(shù)據(jù)庫的要求;
[0029]2.該方法解決了達(dá)夢本地磁盤備份生成的數(shù)據(jù)存放的位置不安全性,如果數(shù)據(jù)庫管理員迀移數(shù)據(jù)會(huì)增加工作量;
[0030]3.該方法解決了達(dá)夢磁帶備份時(shí)吞吐速度慢,而且磁帶機(jī)械故障率比較高,容易出現(xiàn)需要恢復(fù)時(shí)不能恢復(fù)數(shù)據(jù);
[0031]4.本發(fā)明采用第三方備份,而不是采用達(dá)夢本身提供的備份方案,可以很好的管理數(shù)據(jù)庫的數(shù)據(jù)安全性,減少各個(gè)數(shù)據(jù)庫廠商為了數(shù)據(jù)安全而增加研發(fā)成本。
【附圖說明】
[0032]圖1為本發(fā)明第三方備份流程圖;
[0033]圖2為本發(fā)明第三方恢復(fù)流程圖。
【具體實(shí)施方式】
[0034]下面結(jié)合附圖和具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)說明。本實(shí)施例以本發(fā)明技術(shù)方案為前提進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過程,但本發(fā)明的保護(hù)范圍不限于下述的實(shí)施例。
[0035]本實(shí)施例提供一種達(dá)夢數(shù)據(jù)庫備份數(shù)據(jù)的方法,主要是通過管道備份恢復(fù)達(dá)夢數(shù)據(jù)庫,使用達(dá)夢提供的DMSBT API的讀寫接口實(shí)現(xiàn),具體包括:
[0036]1、第三方備份達(dá)夢數(shù)據(jù)庫:第三方通過達(dá)夢的SQL語句發(fā)起備份請求,達(dá)夢數(shù)據(jù)庫啟動(dòng)一個(gè)備份恢復(fù)進(jìn)程并加載SBT動(dòng)態(tài)庫通過管道進(jìn)行數(shù)據(jù)的傳輸。
[0037]結(jié)合圖1所示,闡述SBT端和第三方備份端之間數(shù)據(jù)傳輸過程。
[0038]I) SBT 端
[0039]SBT端提供了 DMSBT API的接口,可通過這些接口進(jìn)行環(huán)境初始化、新建備份片和寫數(shù)據(jù)等過程。SBT端備份流程如下:
[0040]①初始化環(huán)境;
[0041 ] sbtinit(initins, &initouts);
[0042]②備份過程初始化;
[0043]sbtinit2(init2ins, &init2outs);
[0044]③新建一個(gè)備份片;
[0045]sbtbackup(SBTFILE_DATAFILE, “DB_DAMENG_..._XXXXXX.bak”);
[0046]④寫數(shù)據(jù),buffer的內(nèi)容寫到sbtbackup創(chuàng)建的備份片;
[0047]sbtwrite(buffer, length);
[0048]......
[0049]⑤一個(gè)備份片備份結(jié)束,關(guān)閉備份片;
[0050]sbtclose ();
[0051]⑥取當(dāng)前結(jié)束備份片的信息;
[0052]sbtinfo(&sbtobjinfos);
[0053]如存在沒有備份完的數(shù)據(jù)或需要寫meta文件,返回③;
[0054]⑦備份meta文件;
[0055]sbtbackup(SBTFILE_DATAFILE, “DB_DAMENG_..._XXXXXX.meta”);
[0056]sbtwrite(buffer, length);
[0057]......
[0058]sbtclose ();
[0059]⑧釋放備份的資源;
[0060]sbtend (FALSE) ;//若備份失敗,則 sbtend(TRUE);
[0061]2)第三方備份端
[0062]第三方備份端既提供了與SBT交互的相關(guān)操作,也提供了與數(shù)據(jù)存儲(chǔ)中心交互的操作。具體操作如下:
[0063]①創(chuàng)建備份時(shí)間點(diǎn)對象;
[0064]每發(fā)起一次備份就相應(yīng)產(chǎn)生一個(gè)時(shí)間點(diǎn)對象,該時(shí)間點(diǎn)對象記錄了當(dāng)前備份的類型并發(fā)送給數(shù)據(jù)存儲(chǔ)中心。
[0065]②創(chuàng)建數(shù)據(jù)庫實(shí)例對象;
[0066]每個(gè)數(shù)據(jù)庫實(shí)例在每一個(gè)時(shí)間點(diǎn)都會(huì)產(chǎn)生一個(gè)數(shù)據(jù)庫實(shí)例對象,在發(fā)送數(shù)據(jù)庫實(shí)例對象給數(shù)據(jù)存儲(chǔ)中心之前,需要執(zhí)行的操作如下:首先是創(chuàng)建與SBT交互的服務(wù)器管道并讓管道處于等待狀態(tài);其次是創(chuàng)建備份線程,線程中使用SQL語句啟動(dòng)備份過程;最后是接收SBT發(fā)送給服務(wù)器管道的初始化消息,表示第三方備份端和SBT端可以正式通信。
[0067]③創(chuàng)建備份片或meta對象;
[0068]達(dá)夢數(shù)據(jù)庫備份生成一個(gè)完整的備份集,一個(gè)備份集包含若干備份片文件和一個(gè)該備份集的meta文件。根據(jù)SBT的sbtbackup接口發(fā)送過來的備份文件類型可以區(qū)別是備份片還是meta文件,發(fā)送備份片對象或meta對象到數(shù)據(jù)存儲(chǔ)中心。
[0069]④創(chuàng)建備份片或meta的數(shù)據(jù)塊對象;
[0070]數(shù)據(jù)塊對象將數(shù)據(jù)塊以一個(gè)對象的方式發(fā)送數(shù)據(jù)塊到數(shù)據(jù)存儲(chǔ)中心,根據(jù)SBT的sbtwrite接口通過管道發(fā)送數(shù)據(jù)塊到第三方備份端。
[0071]2、第三方恢復(fù)達(dá)夢數(shù)據(jù)庫:第三方通過達(dá)夢的DMRMAN進(jìn)程發(fā)起恢復(fù)請求,達(dá)夢數(shù)據(jù)庫啟動(dòng)一個(gè)備份恢復(fù)進(jìn)程并加載SBT動(dòng)態(tài)庫通過管道進(jìn)行數(shù)據(jù)的傳輸。
[0072]結(jié)合圖2所示,闡述SBT端和第三方恢復(fù)端之間數(shù)據(jù)傳輸過程。
[0073]I) SBT 端
[0074]SBT端提供了 DMSBT API的接口,可通過這些接口進(jìn)行環(huán)境初始化、數(shù)據(jù)恢復(fù)和數(shù)據(jù)讀等過程。SBT端恢復(fù)流程如下:
[0075]第一,恢復(fù)元數(shù)據(jù)文件并對其校驗(yàn);
[0076]①初始化環(huán)境;
[0077]sbtinit(initins, &initouts);
[0078]②還原過程初始化;
[0079]sbtinit2(init2ins, &init2outs);
[0080]③打開并讀取meta文件,此處文件名使用sbtinit2中返回的meta文件名,忽略目錄信息;
[0081 ] sbtrestore ( “DB_DAMENG_..._ΧΧΧΧΧΧ.meta”);
[0082]sbtread(buffer, length);
[0083]sbtclose ();
[0084]④釋放恢復(fù)的資源;
[0085]sbtend (FALSE) ;//若恢復(fù)失敗,則 sbtend (TRUE);
[0086]第二,還原備份集過程,通過DMRMAN進(jìn)程進(jìn)行脫機(jī)還原數(shù)據(jù);
[0087]①初始化環(huán)境;
[0088]sbtinit(initins, &initouts);
[0089]②還原過程初始化;
[0090]sbtinit2(init2ins, &init2outs);
[0091]③打開并讀取meta文件,此處文件名使用sbtinit2中返回的meta文件名,忽略目錄信息;
[0092]sbtrestore ( “DB_DAMENG_..._ΧΧΧΧΧΧ.meta”);
[0093]sbtread (buffer, length);
[0094]sbtclose ();
[0095