專利名稱:一種實(shí)現(xiàn)斷點(diǎn)續(xù)傳的增量式數(shù)據(jù)遷移方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)遷移技術(shù),尤其是涉及一種實(shí)現(xiàn)斷點(diǎn)續(xù)傳機(jī)制的增量式數(shù)據(jù)遷移方法。
背景技術(shù):
隨著企業(yè)信息化的發(fā)展,原有的數(shù)據(jù)庫系統(tǒng)可能不能滿足企業(yè)當(dāng)前的需要,舊的數(shù)據(jù)庫系統(tǒng)需要轉(zhuǎn)換到新的數(shù)據(jù)庫系統(tǒng),通常是異構(gòu)的數(shù)據(jù)庫系統(tǒng)。為了有效地利用舊系統(tǒng)的歷史數(shù)據(jù),舊數(shù)據(jù)庫中的各種對象,尤其是表對象和數(shù)據(jù)需要移植到另外一種目標(biāo)數(shù)據(jù)庫中。這就必不可少的涉及到數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)遷移問題。數(shù)據(jù)遷移是指在不同數(shù)據(jù)庫之間將源數(shù)據(jù)庫中的數(shù)據(jù)遷移到目標(biāo)數(shù)據(jù)庫中。遷移的質(zhì)量和效率往往是新系統(tǒng)成功上線的重要前提,也是新系統(tǒng)今后穩(wěn)定運(yùn)行的有力保障?,F(xiàn)有的數(shù)據(jù)遷移工具和方法一般先制定好本次遷移的任務(wù),視整個(gè)的遷移任務(wù)為一個(gè)整體,對遷移中斷的情況不做考慮。雖然商業(yè)上的遷移工具一般都提供遷移日志,會(huì)給用戶提供哪些數(shù)據(jù)庫對象遷移成功,哪些遷移失敗的信息,但是不會(huì)在遷移的機(jī)制中考慮和利用這些信息。已有的遷移工具和方法存在著如下兩個(gè)問題1、未能考慮到遷移中斷的情況。用戶的業(yè)務(wù)涉及的數(shù)據(jù)量往往是巨大的,尤其對于海量數(shù)據(jù)庫,其中的表可能會(huì)有幾萬張,每張表的記錄數(shù)可能達(dá)到上億條。這就導(dǎo)致遷移的過程耗時(shí)會(huì)很長,過程中出現(xiàn)網(wǎng)絡(luò)中斷、系統(tǒng)或應(yīng)用程序崩潰等異常情況的可能性因素大大增加,而萬一發(fā)生這些異常情況而導(dǎo)致遷移中斷,用戶或者整體重新遷移一遍,覆蓋掉以前的遷移成果,導(dǎo)致上一次的遷移前功盡棄;或者用戶手工篩選出還未完成遷移的任務(wù),改變下次遷移任務(wù)的范圍,而對于海量數(shù)據(jù)庫,手工篩選任務(wù)費(fèi)時(shí)費(fèi)力,出錯(cuò)幾率增加,正確性難以保證。2、個(gè)別方法和工具考慮到了遷移中斷和斷點(diǎn)續(xù)傳的情況,但是方案過于簡單,局限性較大。文獻(xiàn)“異構(gòu)數(shù)據(jù)庫遷移的設(shè)計(jì)和實(shí)現(xiàn),計(jì)算機(jī)應(yīng)用研究,2006年第12期”給出了一種簡單的斷點(diǎn)續(xù)傳的數(shù)據(jù)遷移方法,如果遷移中斷,目的表中的數(shù)據(jù)肯定比源端表的數(shù)據(jù)少,當(dāng)再次遷移時(shí),該方法從源端數(shù)據(jù)庫中取得源端表的結(jié)果集,以目的端的行數(shù)為基準(zhǔn), 移動(dòng)源端結(jié)果集的游標(biāo)到一位置A,則從游標(biāo)位置A到結(jié)果集末尾的所有記錄即是本次需要繼續(xù)遷移的對象。該方法的局限性體現(xiàn)在第一該方法以源端表和目的端表的記錄數(shù)為依據(jù),斷點(diǎn)續(xù)傳的遷移只能作用于表的內(nèi)部,而未能考慮到表對象級別的續(xù)傳。如果遷移發(fā)生中斷,該方法不能直接判斷出是哪張表發(fā)生了遷移中斷,此次遷移任務(wù)中,哪些表已經(jīng)成功遷移,哪些表未能遷移,需要從哪里開始。當(dāng)然也可將該方法作用于所有表的遷移,但是已經(jīng)成功遷移的表也需要做大量判斷,遷移效率將大大降低。
第二 該方法嚴(yán)格要求在被中斷的遷移和和下一次的斷點(diǎn)續(xù)傳的遷移之間,遷移任務(wù)涉及的目的端的表對象的記錄數(shù)必須保持不變。萬一發(fā)生變化,比如在被中斷的遷移和斷點(diǎn)續(xù)傳的遷移之間,用戶在目的端表插入了新的一行記錄,則該方法不再適用。第三未能考慮和不適用于索引、序列等其它數(shù)據(jù)庫對象。例如,對于數(shù)據(jù)量較大的表,索引的建立也可能耗費(fèi)相當(dāng)長的時(shí)間,如果遷移發(fā)生中斷,則該方法不能判斷出哪些索引已經(jīng)建立,哪些還未建立,如果要得到答案,可能需要人工查找目標(biāo)庫或者遷移日志, 費(fèi)時(shí)費(fèi)力,降低了遷移效率。
發(fā)明內(nèi)容
針對上述遷移中斷時(shí)重復(fù)遷移數(shù)據(jù)和簡單的基于行數(shù)的表內(nèi)部的斷點(diǎn)續(xù)傳的問題,本發(fā)明提供了一種全新的實(shí)現(xiàn)斷點(diǎn)續(xù)傳的數(shù)據(jù)遷移方法,該方法能夠?qū)崿F(xiàn)表對象、索引、序列的斷點(diǎn)續(xù)遷;對于記錄級別的斷點(diǎn)續(xù)遷,也有較高的可靠性和效率。本發(fā)明所述的數(shù)據(jù)遷移的斷點(diǎn)續(xù)傳不同于文件傳輸?shù)臄帱c(diǎn)續(xù)傳,文件傳輸往往以字節(jié)為單位進(jìn)行操作的,因此,它的傳輸可以從每個(gè)字節(jié)重新傳輸。而本發(fā)明所涉及的數(shù)據(jù)庫遷移的斷點(diǎn)續(xù)傳是以如表對象、記錄、索引為單位的。重新執(zhí)行遷移任務(wù)時(shí),從中斷點(diǎn)繼續(xù)遷移,只遷移未完成的表、記錄和索引。本發(fā)明所涉及的斷點(diǎn)續(xù)傳的遷移方法主要包括兩方面基于遷移任務(wù)的遷移中斷狀態(tài)保存和遷移中斷狀態(tài)恢復(fù)。該方法所實(shí)現(xiàn)的數(shù)據(jù)遷移采用下列步驟A、建立和保存遷移項(xiàng)目包括遷移的項(xiàng)目名稱和本次的遷移任務(wù)(或稱遷移計(jì)劃)。具體的操作為連接源數(shù)據(jù)庫和目的數(shù)據(jù)庫,選擇要遷移的表對象、索引。遷移任務(wù)的內(nèi)容包括源數(shù)據(jù)庫、目的數(shù)據(jù)庫、遷移狀態(tài)、表對象、索引。其中表對象是按表名排序保存的。保存遷移項(xiàng)目的狀態(tài)設(shè)置為“未完成”。B、開始遷移,實(shí)時(shí)保存遷移狀態(tài)以遷移表為例,遷移過程中,將當(dāng)前正在遷移表以及下一個(gè)等待遷移的表保存到“未完成遷移”文件中。如果當(dāng)前正在遷移的表遷移完成, 就將該表從“未完成遷移”文件中刪除?!拔赐瓿蛇w移”文件中的內(nèi)容隨著遷移過程的進(jìn)行是動(dòng)態(tài)變化的,始終記錄的是當(dāng)前正在遷移表以及下一個(gè)等待遷移的表。同時(shí),對每張表而言,“未完成遷移”文件中要登記正在遷移的一批數(shù)據(jù)記錄的標(biāo)識信息。標(biāo)識信息是記錄的標(biāo)識列的特征信息。一般來講,標(biāo)識列的值最好是唯一的。如果有主鍵,標(biāo)識列優(yōu)先選取主鍵;如果沒有,可以任意選取一個(gè)列。而對于Oracle數(shù)據(jù)庫而言,Oracle 8i后每行記錄都提供了 rowid,我們可以選取rowid作為標(biāo)識列。首先根據(jù)標(biāo)識列,對源表的記錄進(jìn)行一次從小到大的排序操作來取得源表的結(jié)果集。由于每張表的數(shù)據(jù)記錄數(shù)可能很多,出于效率的考慮,我們可以在一個(gè)事務(wù)中每次取一定數(shù)量的記錄,比如1000行記錄,在目的端表進(jìn)行批量裝載和插入。這1000行數(shù)據(jù)作為一個(gè)整體,或者都遷移成功,或者都失敗。因此,對于這一批要遷移的記錄來說,我們可以只記錄最后一條記錄的標(biāo)識信息。如果標(biāo)識列的值唯一,則標(biāo)識信息就是記錄的標(biāo)識列的值,如果不唯一,則標(biāo)識信息是一個(gè)長整形數(shù)值,代表記錄的位置信息,如成功遷移了 5000條記錄,則該值取5000。C、如果遷移任務(wù)成功完成,就將“遷移任務(wù)”文件中的該任務(wù)的狀態(tài)置為“已完成”。如果遷移發(fā)生中斷,需要重新開始遷移,就從“遷移任務(wù)”文件和“未完成遷移”文件獲取被中斷的表對象,開始遷移未完成的表對象。而對于遷移時(shí)被中斷的那張表,可以在“未完成遷移”文件中取得已經(jīng)遷移完成的標(biāo)識信息。繼續(xù)遷移時(shí)只要取大于該標(biāo)示列的值的記錄繼續(xù)就可以了。所述步驟中的步驟A和B是數(shù)據(jù)遷移中斷狀態(tài)的保存,當(dāng)數(shù)據(jù)遷移發(fā)生中斷之前, 遷移的狀態(tài)已經(jīng)提前保存到文件中。步驟C是遷移中斷狀態(tài)的恢復(fù),當(dāng)重新遷移時(shí),將中斷點(diǎn)的遷移信息恢復(fù)出來,能夠從中斷點(diǎn)繼續(xù)遷移。為了恢復(fù)中斷點(diǎn)狀態(tài),步驟C進(jìn)一步包括Cl、判斷“遷移任務(wù)”文件中的狀態(tài),如果是“已完成”,則結(jié)束;如果是“未完成”,則讀取“未完成遷移”文件中的內(nèi)容,獲得“當(dāng)前正在遷移表”以及“下一個(gè)等待遷移的表”信肩、οC2、由于“當(dāng)前正在遷移表”在中斷發(fā)生之前,是正在進(jìn)行遷移的,說明這些表還未遷移完成,將這些表加入到需要繼續(xù)的遷移任務(wù)中。C3、對于“當(dāng)前正在遷移表”,要取出最后完成遷移的記錄標(biāo)識。再次遷移時(shí),對該表按照標(biāo)識字段(包括標(biāo)識字段名稱、標(biāo)識字段是否唯一和標(biāo)示字段的值)對源端表的記錄進(jìn)行過濾,去除掉已經(jīng)完成遷移的記錄,只遷移未完成的記錄。C4、“下一個(gè)等待遷移的表”是未開始遷移的,由于“遷移任務(wù)”文件中的表對象是順序記錄的,則“下一個(gè)等待遷移的表”標(biāo)記了所有未開始遷移的表在“遷移任務(wù)”文件中的起始位置,將這個(gè)位置及其之后的表對象加入到遷移任務(wù)中。然后,開始下一次遷移。
圖1為本發(fā)明涉及的數(shù)據(jù)遷移系統(tǒng)結(jié)構(gòu)圖。圖2為本發(fā)明的斷點(diǎn)續(xù)傳的遷移方法的原理圖。圖3是本發(fā)明的實(shí)施例的系統(tǒng)結(jié)構(gòu)圖。
具體實(shí)施例方式下面結(jié)合附圖對本發(fā)明的具體實(shí)施方式
作進(jìn)一步的詳細(xì)描述,描述下本發(fā)明的具體原理。傳統(tǒng)的數(shù)據(jù)遷移系統(tǒng),如Oracle和微軟、IBM的Oracle、SQL Server、DB2提供的商業(yè)數(shù)據(jù)遷移工具,都沒有中斷處理功能,不能做到斷點(diǎn)續(xù)傳。雖然文獻(xiàn)“異構(gòu)數(shù)據(jù)庫遷移的設(shè)計(jì)和實(shí)現(xiàn),計(jì)算機(jī)應(yīng)用研究,2006年第12期”給出了一種簡單的斷點(diǎn)續(xù)傳的數(shù)據(jù)遷移方法,但有著較大的局限性。本發(fā)明所涉及的數(shù)據(jù)遷移系統(tǒng),不同于傳統(tǒng)的數(shù)據(jù)遷移系統(tǒng), 其結(jié)構(gòu)如圖1所示,其中,數(shù)據(jù)庫訪問接口是操作源數(shù)據(jù)庫和目的數(shù)據(jù)庫,進(jìn)行數(shù)據(jù)的取出和導(dǎo)入的模塊;數(shù)據(jù)轉(zhuǎn)換模塊是完成數(shù)據(jù)從源端遷移到目的端的類型和格式的轉(zhuǎn)換;斷點(diǎn)續(xù)傳中斷處理模塊實(shí)現(xiàn)了斷點(diǎn)續(xù)傳功能,包括中斷狀態(tài)保存和中斷狀態(tài)恢復(fù)。下面結(jié)合圖 2詳細(xì)介紹本發(fā)明的斷點(diǎn)續(xù)傳方法的流程Si、連接源數(shù)據(jù)庫和目的數(shù)據(jù)庫,可以使用數(shù)據(jù)庫通用訪問接口如0DBC/JDBC驅(qū)動(dòng)連接。S2、選擇本次要從源數(shù)據(jù)庫遷移的表對象,獲取表的元數(shù)據(jù)信息。在啟用斷點(diǎn)續(xù)傳機(jī)制的情況下,缺省的本次要遷移的表是上一次的被中斷的遷移任務(wù)中未能完成遷移的表。
S3、將遷移任務(wù)保存到“遷移任務(wù)”文件MigrationTask. xml中。文件內(nèi)容包括 源數(shù)據(jù)庫、目的數(shù)據(jù)庫、狀態(tài)、表對象、索引,以XML格式保存這些信息。其中表對象是按表名排序保存的,狀態(tài)字段設(shè)置為“未完成”。下面以遷移表和記錄為例介紹,索引的中斷續(xù)遷情況與表類似。 S4、開始遷移表對象,可以并發(fā)同時(shí)遷移多個(gè)表。S5、先處理遷移被中斷的表,即找到UnfinishedTables. xml中的CurTables內(nèi)的表。如果當(dāng)前CurTables不為空,則說明此前遷移發(fā)生過中斷,依次取得CurTables中被中斷的表和該表的標(biāo)示字段,按照標(biāo)識字段對源表數(shù)據(jù)進(jìn)行排序和過濾,取得所有未完成遷移的記錄,進(jìn)行續(xù)遷;否則說明沒有發(fā)生過中斷,正常進(jìn)行遷移。在遷移過程中,將當(dāng)前正在遷移表CurTables以及下一個(gè)等待遷移的表WaitingTable保存到“未完成遷移”文件 UnfinishedTables. xml中。當(dāng)正在遷移的表遷移完成,就將該表從UnfinishedTables. xml 中刪除,然后將新的開始遷移的表名記錄到UnfinishedTables. xml的CurTables中,同時(shí)將WaitTable修改為新的等待遷移的表。UnfinishedTables. xml中的內(nèi)容隨著遷移過程的進(jìn)行是動(dòng)態(tài)變化的,始終記錄的是當(dāng)前正在遷移表以及下一個(gè)等待遷移的表。同時(shí),對正在遷移的表,從源端查詢結(jié)果集時(shí),表記錄要按照標(biāo)識字段排序,如 rowid或者主鍵列或者其它任意一列。正在遷移表CurTables有關(guān)標(biāo)識列的子節(jié)點(diǎn)信息叫 IdentityColumn, unique和LastFinishedRow,分別代表標(biāo)識列名稱、值是否唯一及最后完成遷移的記錄的標(biāo)識列的值信息。遷移的時(shí)候,按照批量遷移策略,在一個(gè)事務(wù)中每次取一定數(shù)量的記錄,比如1000行記錄,在目的端表進(jìn)行批量裝載和插入。隨著每一批次記錄遷移完成,都要更新LastFinishedRow的值為這個(gè)批次成功完成遷移的記錄中最后一條記錄的標(biāo)識列的值。S6、如果遷移過程正常結(jié)束,所有的表對象遷移完成,就將MigrationTask. xml中的狀態(tài)設(shè)置為“已完成”。S7、如果遷移過程發(fā)生中斷,需要重新遷移任務(wù),首先,判斷Mi grationTask. xml中的狀態(tài),如果是“已完成”,則結(jié)束;如果是“未完成”,則讀取UnfinishedTables. xml中的內(nèi)容,獲得CurTables、被中斷表的標(biāo)識字段(包含IdentityColumn, unique、 LastFinishedRow)以及 WaitingTable 信息。S8、由于CurTables在中斷發(fā)生之前,是正在進(jìn)行遷移的,說明這些表還未遷移完成,將這些表加入到需要繼續(xù)的遷移任務(wù)中。另外,WaitingTable是還未開始遷移的,根據(jù) MigrationTask. xml記錄的表對象的順序,則WaitingTable標(biāo)記了所有其它未開始遷移的表在MigrationTask. xml中的起始位置,將這個(gè)位置及其之后的表加入到遷移任務(wù)中。然后,執(zhí)行步驟Si,繼續(xù)遷移過程。本發(fā)明的方法實(shí)現(xiàn)了數(shù)據(jù)遷移過程中的斷點(diǎn)續(xù)傳,當(dāng)在數(shù)據(jù)遷移的過程中發(fā)生死機(jī)、停電、網(wǎng)絡(luò)斷開、系統(tǒng)或者應(yīng)用程序崩潰等情況,導(dǎo)致遷移失敗時(shí),遷移的狀態(tài)會(huì)自動(dòng)保存下來,重新執(zhí)行遷移過程時(shí),會(huì)從中斷點(diǎn)開始遷移,只遷移未完成的表對象、記錄和索引, 跳過已遷移完成的表對象、記錄和索引,避免重復(fù)遷移。例如,為了移植數(shù)據(jù)庫系統(tǒng),需要遷移10000個(gè)表對象,在遷移第8001個(gè)表對象時(shí),遷移發(fā)生中斷,這時(shí)第8001張表遷移已經(jīng)完成了其總共1000萬行中的800萬行記錄?;诒景l(fā)明的方法,重新開始遷移時(shí),會(huì)自動(dòng)的從第8001個(gè)表的第8000001行記錄開始進(jìn)行增量式遷移。這樣就避免了不必要的重復(fù)遷移或者人工識別的繁瑣工作,保證了每次遷移的有效性,提升了數(shù)據(jù)遷移的效率。通過本發(fā)明,可以最大程度的避免數(shù)據(jù)遷移時(shí)發(fā)生的中斷帶來的損失,保證每次遷移的有效性和整體遷移的連續(xù)性。例如,某南方國有大型電力單位的某電力信息系統(tǒng)原先采用Oracle數(shù)據(jù)庫,現(xiàn)由于某種需求要遷移到神通海量數(shù)據(jù)庫KSTORE中。該電力系統(tǒng)業(yè)務(wù)邏輯較復(fù)雜,系統(tǒng)中的表有上萬張而且有些表的數(shù)據(jù)量非常巨大,可達(dá)上億條記錄。利用原有的神通數(shù)據(jù)庫的遷移工具實(shí)施遷移數(shù)據(jù)時(shí),發(fā)生過網(wǎng)絡(luò)中斷的情況導(dǎo)致遷移被中斷,而遷移操作人員一般會(huì)刪掉目標(biāo)庫中的數(shù)據(jù),再執(zhí)行一遍遷移任務(wù),導(dǎo)致大量數(shù)據(jù)重復(fù)遷移,相當(dāng)?shù)暮馁M(fèi)時(shí)間。雖然遷移操作人員可選擇根據(jù)遷移日志來判斷哪些表執(zhí)行了成功的遷移,從而篩選出哪些表還未遷移,進(jìn)一步修改遷移任務(wù)。但表對象有上萬張,同樣,索引信息也是成千上萬,人工的篩選費(fèi)時(shí)費(fèi)力且非常容易犯錯(cuò)誤。在基于斷點(diǎn)續(xù)傳的數(shù)據(jù)庫遷移的思路基礎(chǔ)上,在原有的神通數(shù)據(jù)庫的遷移工具中加入了本發(fā)明所述的斷點(diǎn)續(xù)傳的機(jī)制。整個(gè)實(shí)例的系統(tǒng)結(jié)構(gòu)圖如附圖3所示。在遷移系統(tǒng)中加入本發(fā)明所述的斷點(diǎn)續(xù)傳的機(jī)制后,系統(tǒng)在表、索引對象級別和記錄級別實(shí)現(xiàn)了斷點(diǎn)續(xù)傳。一張涉及主要業(yè)務(wù)的數(shù)據(jù)表,有上億條記錄,發(fā)生中斷時(shí),已經(jīng)接近遷移完成。利用原有遷移工具,只能刪除重來,而利用加入本文發(fā)明的遷移方法的遷移工具,遷移任務(wù)可多次執(zhí)行增量式的遷移而決不會(huì)重復(fù)遷移,而且整個(gè)遷移過程對操作人員是透明的。通過本發(fā)明技術(shù)的應(yīng)用,該遷移工具成功實(shí)施了 Oracle和神通KSTORE數(shù)據(jù)庫間海量數(shù)據(jù)的遷移,保證了遷移的質(zhì)量和效率,且整個(gè)斷點(diǎn)續(xù)傳機(jī)制不需要用戶任何干預(yù),對用戶完全透明。用戶只需要制定好一次的遷移任務(wù),發(fā)生中斷時(shí)再次執(zhí)行即可。當(dāng)然,本發(fā)明還可有其他多種實(shí)施例,在不背離本發(fā)明精神及其實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但是這些改變和變形均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種實(shí)現(xiàn)斷點(diǎn)續(xù)傳的增量式數(shù)據(jù)遷移方法,其特征在于,該方法包括以下步驟A、連接源數(shù)據(jù)庫和目的數(shù)據(jù)庫,選擇要遷移的表對象,保存本次遷移任務(wù)到“遷移任務(wù)”文件中,并將狀態(tài)設(shè)置為“未完成”;B、開始遷移表對象,可以同時(shí)遷移多個(gè)表對象,遷移過程中,將當(dāng)前正在遷移的表以及下一個(gè)等待遷移的表保存到“未完成遷移”文件中;遷移時(shí),每張表的記錄要按照該表的標(biāo)識列進(jìn)行排序,同時(shí)對正在遷移的表,登記該表的標(biāo)識列的名稱、標(biāo)識列是否唯一到“未完成遷移”文件中,隨著遷移的進(jìn)行,不斷更新表的標(biāo)識列的值,該值代表最新已經(jīng)完成遷移的記錄的特征,當(dāng)正在遷移的表遷移完成,就將該表從“未完成遷移”文件中刪除,“未完成遷移”文件中的內(nèi)容隨著遷移過程的進(jìn)行是動(dòng)態(tài)變化的,始終記錄的是當(dāng)前正在遷移表以及下一個(gè)等待遷移的表,同時(shí),對正在遷移的表,登記和更新該表的標(biāo)識列的值;C、如果遷移任務(wù)成功完成,就將“遷移任務(wù)”文件中的狀態(tài)置為“已完成”,如果遷移發(fā)生中斷,需要重新開始遷移,就從“遷移任務(wù)”文件和“未完成遷移”文件獲取被中斷的表對象,開始遷移未完成的表對象,對遷移恰好被中斷的表,讀取標(biāo)識列的信息,對源表的記錄進(jìn)行過濾,去除已經(jīng)完成遷移的記錄,從中斷點(diǎn)開始繼續(xù)遷移。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于所述“遷移任務(wù)”文件的內(nèi)容包括遷移任務(wù)名稱、源數(shù)據(jù)庫、目的數(shù)據(jù)庫、時(shí)間、狀態(tài)、表對象,所述文件中的時(shí)間是遷移任務(wù)開始執(zhí)行遷移的時(shí)間,狀態(tài)是指遷移是否完成,表對象包括以表名排序的所有表。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于所述“未完成遷移”文件中保存了兩部分內(nèi)容當(dāng)前正在遷移表和下一個(gè)等待遷移的表;其中,對應(yīng)并發(fā)遷移,所述當(dāng)前正在遷移表可以是多個(gè)表,并且其具有標(biāo)識列的名稱、標(biāo)識列的值是否唯一、標(biāo)識列的值三個(gè)信肩、ο
4.根據(jù)權(quán)利要求3所述的方法,其特征在于所述標(biāo)識列的名稱是從表的所有列中選取的一列具有標(biāo)識特征的列的名稱;所述標(biāo)識列的值是否唯一是布爾值,代表該表中該標(biāo)識列的值是否有重復(fù);所述標(biāo)識列的值,代表已經(jīng)完成遷移的記錄的特征信息,當(dāng)所述標(biāo)識列的值唯一,則該值即為已經(jīng)完成遷移的按照標(biāo)識字段排序的最后一條記錄所在標(biāo)識列的值,如果不唯一,該值是一個(gè)長整數(shù),代表已經(jīng)完成遷移的記錄的位置信息。
5.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述“遷移任務(wù)”文件和“未完成遷移” 文件用于中斷狀態(tài)的保存,當(dāng)遷移過程發(fā)生中斷時(shí),將中斷點(diǎn)的遷移狀態(tài)信息記錄下來。
6.根據(jù)上述權(quán)利要求中任意一個(gè)所述的方法,其特征在于,在步驟C中,重新開始遷移時(shí),需要進(jìn)行中斷狀態(tài)的恢復(fù),將中斷點(diǎn)的遷移狀態(tài)信息獲取出來,才能在中斷點(diǎn)繼續(xù)遷移;為了恢復(fù)中斷點(diǎn)狀態(tài),則步驟C進(jìn)一步包括Cl、判斷“遷移任務(wù)”文件中的狀態(tài),如果是“已完成”,則結(jié)束;如果是“未完成”,則讀取 “未完成遷移”文件中的內(nèi)容,獲得“當(dāng)前正在遷移表”以及“下一個(gè)等待遷移的表”信息;C2、由于“當(dāng)前正在遷移表”在中斷發(fā)生之前,是正在進(jìn)行遷移的,說明這些表還未遷移完成,將這些表加入到需要繼續(xù)的遷移任務(wù)中;C3、對于“當(dāng)前正在遷移表”,要取出標(biāo)識列的名稱、標(biāo)識列的值是否唯一和標(biāo)識列的值信息,再次遷移時(shí),對該表按照標(biāo)識列的信息對源端表的記錄進(jìn)行過濾,去除已經(jīng)完成遷移的記錄,只遷移未完成的記錄;C4、“下一個(gè)等待遷移的表”是未開始遷移的,由于“遷移任務(wù)”文件中的表對象是順序記錄的,則“下一個(gè)等待遷移的表”標(biāo)記了所有未開始遷移的表在“遷移任務(wù)”文件中的起始位置,將這個(gè)位置及其之后的表對象加入到遷移任務(wù)中,然后,開始遷移任務(wù)。
全文摘要
本發(fā)明涉及一種實(shí)現(xiàn)斷點(diǎn)續(xù)傳的增量式數(shù)據(jù)遷移方法,該方法類似于文件傳輸?shù)臄帱c(diǎn)續(xù)傳,實(shí)現(xiàn)以表對象和紀(jì)錄為單位的斷點(diǎn)續(xù)遷。當(dāng)數(shù)據(jù)遷移的過程中發(fā)生系統(tǒng)死機(jī)、停電、網(wǎng)絡(luò)斷開、系統(tǒng)或者應(yīng)用程序崩潰等情況而導(dǎo)致遷移失敗,重新執(zhí)行遷移過程時(shí),基于該方法的遷移工具能夠自動(dòng)識別已完成和未完成的遷移任務(wù),從中斷點(diǎn)開始繼續(xù)遷移。本發(fā)明的斷點(diǎn)續(xù)傳的遷移方法主要包括兩方面基于遷移計(jì)劃的遷移中斷狀態(tài)保存和遷移中斷狀態(tài)恢復(fù)。采用本發(fā)明的數(shù)據(jù)遷移方法能夠保證每次遷移的有效性和連續(xù)性,在遷移中斷發(fā)生時(shí),再次執(zhí)行同樣的遷移任務(wù)能夠在原有的基礎(chǔ)上進(jìn)行增量遷移,從而避免不必要的數(shù)據(jù)重復(fù)遷移;同時(shí)該方法也可免除人工對中斷點(diǎn)進(jìn)行識別然后手工調(diào)整遷移任務(wù)的繁瑣性,大大提升了數(shù)據(jù)遷移的效率。尤其在海量數(shù)據(jù)的遷移中,該方法為遷移的連續(xù)性、可靠性和高效性提供了有力的保障。
文檔編號G06F17/30GK102495906SQ20111043669
公開日2012年6月13日 申請日期2011年12月23日 優(yōu)先權(quán)日2011年12月23日
發(fā)明者何清法, 關(guān)剛, 馮柯, 周宇, 孟勃榮, 張熠, 李陽, 蔣志勇, 郭一兵, 顧云蘇 申請人:天津神舟通用數(shù)據(jù)技術(shù)有限公司