本申請屬于互聯(lián)網(wǎng)
技術(shù)領(lǐng)域:
:,具體地說,涉及一種數(shù)據(jù)遷移系統(tǒng)和方法。
背景技術(shù):
::目前典型的數(shù)據(jù)遷移系統(tǒng)是通過全量遷移或者增量遷移完成數(shù)據(jù)遷移。例如oracle的goldengate,goldengate是一種基于日志的結(jié)構(gòu)化數(shù)據(jù)復(fù)制軟件,它通過解析源數(shù)據(jù)庫在線日志或歸檔日志獲得數(shù)據(jù)的增量變化,再將這些變化應(yīng)用到目標(biāo)數(shù)據(jù)庫,從而實現(xiàn)源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫同步。goldengate可以在異構(gòu)的it基礎(chǔ)結(jié)構(gòu)(包括幾乎所有常用操作系統(tǒng)平臺和數(shù)據(jù)庫平臺)之間實現(xiàn)大量數(shù)據(jù)亞秒一級的實時復(fù)制,從而在可以在應(yīng)急系統(tǒng)、在線報表、實時數(shù)據(jù)倉庫供應(yīng)、交易跟蹤、數(shù)據(jù)同步、集中/分發(fā)、容災(zāi)等多個場景下應(yīng)用。goldengate的數(shù)據(jù)集成技術(shù)實施主要包括三個進程(數(shù)據(jù)抽取進程、傳輸進程和應(yīng)用進程)。利用數(shù)據(jù)抽取進程在源數(shù)據(jù)庫讀取在線日志或歸檔日志,然后進行解析,只提取其中數(shù)據(jù)的變化如增、刪、改操作,并將相關(guān)信息轉(zhuǎn)換為自定義的中間格式存放在隊列文件中,再利用傳輸進程將隊列文件通過tcp/ip傳送到目標(biāo)數(shù)據(jù)庫。數(shù)據(jù)抽取進程在每次讀完日志中的數(shù)據(jù)變化并在數(shù)據(jù)傳送到目標(biāo)系統(tǒng)后,會寫檢查點,記錄當(dāng)前完成抽取的日志的位置,檢查點的存在可以使數(shù)據(jù)抽取進程在中止并恢復(fù)后可從檢查點位置繼續(xù)復(fù)制日志。目標(biāo)數(shù)據(jù)庫接收數(shù)據(jù)變化并緩存到隊列中,隊列為一系列臨時存儲數(shù)據(jù)變化的文件,等待應(yīng)用進程讀取數(shù)據(jù)。應(yīng)用進程從隊列中讀取數(shù)據(jù)變化并創(chuàng)建對應(yīng)的sql語句,通過數(shù)據(jù)庫的本地接口執(zhí)行,提交到數(shù)據(jù)庫成功后更新自己的檢查點,記錄已經(jīng)完成復(fù)制的位置。還有一些類似的數(shù)據(jù)庫,如微軟的sqlservermigrationassistant(簡稱 ssma)是由微軟發(fā)布的幫助客戶更容易地從oracle/sybase/mysql/access遷移到sqlserver以及sqlazure的一個工具集。微軟的sqlservermigrationassistant不是一種通用的數(shù)據(jù)遷移系統(tǒng),而oracle的goldengate也只有增量遷移,而沒有全量遷移。技術(shù)實現(xiàn)要素:有鑒于此,本申請所要解決的技術(shù)問題是提供了一種數(shù)據(jù)遷移系統(tǒng)和方法,以解決現(xiàn)有技術(shù)中缺少支持各種同構(gòu)和異構(gòu)數(shù)據(jù)庫之間進行全量遷移的通用的數(shù)據(jù)遷移系統(tǒng)的技術(shù)問題。為了解決上述技術(shù)問題,本申請公開了一種數(shù)據(jù)遷移系統(tǒng),包括:入口(portal)模塊,應(yīng)用程序編程接口(api)模塊,分布式調(diào)度模塊,全量遷移模塊;所述入口模塊用于提供管理遷移任務(wù)的入口,接收由客戶端創(chuàng)建的遷移任務(wù)和指定的第一數(shù)據(jù)庫、第二數(shù)據(jù)庫和所述第一數(shù)據(jù)庫的待遷移數(shù)據(jù),所述遷移任務(wù)包括全量遷移;所述應(yīng)用程序編程接口模塊用于向所述客戶端提供服務(wù)接口,以根據(jù)所述遷移任務(wù)中的遷移類型調(diào)用對應(yīng)的全量遷移模塊;所述分布式調(diào)度模塊用于監(jiān)控各遷移任務(wù)的執(zhí)行狀態(tài),并根據(jù)各個設(shè)備的當(dāng)前負載對遷移任務(wù)進行調(diào)度,以實現(xiàn)各個設(shè)備的負載均衡;所述全量遷移模塊,用于將所述待遷移數(shù)據(jù)從所述第一數(shù)據(jù)庫遷移到所述第二數(shù)據(jù)庫,當(dāng)所述第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,通過預(yù)設(shè)的中間格式將所述待遷移數(shù)據(jù)的數(shù)據(jù)類型轉(zhuǎn)換為所述第二數(shù)據(jù)庫的數(shù)據(jù)類型,按照轉(zhuǎn)換后的數(shù)據(jù)類型將所述待遷移數(shù)據(jù)寫入所述第二數(shù)據(jù)庫。其中,所述系統(tǒng)進一步包括第一遷移評估單元,當(dāng)所述遷移任務(wù)包括遷移評估時,所述第一遷移評估單元,接受所述應(yīng)用程序編程接口模塊的調(diào)用,用于在所述全量遷移模塊對所述待遷移數(shù)據(jù)的進行遷移之前,根據(jù)所述第一數(shù)據(jù)庫和第二數(shù)據(jù)庫輸出評估報告,其中,所述評估報告包括所述第一數(shù)據(jù)庫的空間占用信息,庫表列和對象信息,執(zhí)行的sql以及處理性能信息,所述評估報告還包括所述第二數(shù)據(jù)庫的不兼容特 性信息以及改造成本信息。其中,所述系統(tǒng)進一步包括結(jié)構(gòu)遷移模塊,當(dāng)所述遷移任務(wù)包括結(jié)構(gòu)遷移時,所述結(jié)構(gòu)遷移模塊,接受所述應(yīng)用程序編程接口模塊的調(diào)用,用于在所述全量遷移模塊進行數(shù)據(jù)遷移之前,將所述待遷移數(shù)據(jù)所使用的庫表列和對象遷移到所述第二數(shù)據(jù)庫,當(dāng)所述第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,通過預(yù)設(shè)的類型映射關(guān)系確定所述庫表列和對象在所述第二數(shù)據(jù)庫中的類型,在所述第二數(shù)據(jù)庫創(chuàng)建與所述類型相對應(yīng)的庫表列和對象。其中,所述系統(tǒng)進一步包括第二遷移評估單元,當(dāng)所述遷移任務(wù)包括遷移評估時,所述第二遷移評估單元,接受所述應(yīng)用程序編程接口模塊的調(diào)用,用于在所述結(jié)構(gòu)遷移模塊對所述待遷移數(shù)據(jù)所使用的庫表列和對象進行遷移之前,根據(jù)所述第一數(shù)據(jù)庫和第二數(shù)據(jù)庫輸出評估報告,其中,所述評估報告包括所述第一數(shù)據(jù)庫的空間占用信息,庫表列和對象信息,執(zhí)行的sql以及處理性能信息,所述評估報告還包括所述第二數(shù)據(jù)庫的不兼容特性信息以及改造成本信息。其中,所述分布式調(diào)度模塊通過統(tǒng)計數(shù)據(jù)遷移系統(tǒng)內(nèi)各個設(shè)備上執(zhí)行的單元化的數(shù)量及內(nèi)存占用率來進行遷移任務(wù)的調(diào)度,以實現(xiàn)各個設(shè)備之間負載均衡。其中,所述全量遷移模塊在向所述第二數(shù)據(jù)庫寫入數(shù)據(jù)時,記錄已寫入數(shù)據(jù)的位點信息,用于斷點續(xù)傳。其中,所述全量遷移模塊進一步用于,當(dāng)全量遷移任務(wù)中的第一數(shù)據(jù)庫與第二數(shù)據(jù)庫同構(gòu)時,將待遷移數(shù)據(jù)按照庫表列的當(dāng)前結(jié)構(gòu)進行遷移。其中,所述全量遷移模塊進一步用于,當(dāng)全量遷移任務(wù)中的第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,對于異構(gòu)數(shù)據(jù)庫之間的數(shù)據(jù)遷移,根據(jù)預(yù)設(shè)的中間格式來完成異構(gòu)數(shù)據(jù)庫之間數(shù)據(jù)類型的轉(zhuǎn) 換。其中,所述全量遷移模塊進一步用于,在全量遷移過程中,若遇到第一數(shù)據(jù)庫的庫名、表名、列名與第二數(shù)據(jù)庫的庫名、表名、列名不一致的情況,則依據(jù)預(yù)設(shè)的庫表列的映射規(guī)則進行映射,將庫表列的數(shù)據(jù)寫入到第二數(shù)據(jù)庫對應(yīng)的庫表列。本申請公開了一種數(shù)據(jù)遷移系統(tǒng),包括:入口(portal)模塊,應(yīng)用程序編程接口(api)模塊,分布式調(diào)度模塊,全量遷移模塊,增量遷移模塊;所述入口模塊用于提供管理遷移任務(wù)的入口,接收由客戶端創(chuàng)建的遷移任務(wù)和指定的第一數(shù)據(jù)庫、第二數(shù)據(jù)庫和所述第一數(shù)據(jù)庫的待遷移數(shù)據(jù),所述遷移任務(wù)包括全量遷移、增量遷移;所述應(yīng)用程序編程接口模塊用于向所述客戶端提供服務(wù)接口,以根據(jù)所述遷移任務(wù)中的遷移類型調(diào)用對應(yīng)的全量遷移模塊,增量遷移模塊;所述分布式調(diào)度模塊用于監(jiān)控各遷移任務(wù)的執(zhí)行狀態(tài),并根據(jù)各個設(shè)備的當(dāng)前負載對遷移任務(wù)進行調(diào)度,以實現(xiàn)各個設(shè)備的負載均衡;所述全量遷移模塊,用于將所述待遷移數(shù)據(jù)從所述第一數(shù)據(jù)庫遷移到所述第二數(shù)據(jù)庫,當(dāng)所述第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,通過預(yù)設(shè)的中間格式將所述待遷移數(shù)據(jù)的數(shù)據(jù)類型轉(zhuǎn)換為所述第二數(shù)據(jù)庫的數(shù)據(jù)類型,按照轉(zhuǎn)換后的數(shù)據(jù)類型將所述待遷移數(shù)據(jù)寫入所述第二數(shù)據(jù)庫;所述增量遷移模塊,用于以所述全量遷移開始時的第一時刻為基準(zhǔn),將所述待遷移數(shù)據(jù)在所述第一時刻之后產(chǎn)生變化的數(shù)據(jù)遷移到所述第二數(shù)據(jù)庫,當(dāng)所述第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,通過預(yù)設(shè)的中間格式將所述產(chǎn)生變化的數(shù)據(jù)的數(shù)據(jù)類型轉(zhuǎn)換為所述第二數(shù)據(jù)庫的數(shù)據(jù)類型,按照轉(zhuǎn)換后的數(shù)據(jù)類型將所述產(chǎn)生變化的數(shù)據(jù)寫入所述第二數(shù)據(jù)庫。其中,所述系統(tǒng)進一步包括第一遷移評估單元,當(dāng)所述遷移任務(wù)包括遷移評估時,所述第一遷移評估單元,接受所述應(yīng)用程序編程接口模塊的調(diào)用,用于在所述全量遷移模塊對所述待遷移數(shù)據(jù)的進行遷移之前,根據(jù)所述第一數(shù)據(jù)庫和第二數(shù)據(jù)庫輸出評估報告,其中,所述評估報告包括所述第一數(shù)據(jù)庫的空間占用信息,庫表列和對象信息,執(zhí)行 的sql以及處理性能信息,所述評估報告還包括所述第二數(shù)據(jù)庫的不兼容特性信息以及改造成本信息。其中,所述系統(tǒng)進一步包括結(jié)構(gòu)遷移模塊,當(dāng)所述遷移任務(wù)包括結(jié)構(gòu)遷移時,所述結(jié)構(gòu)遷移模塊,接受所述應(yīng)用程序編程接口模塊的調(diào)用,用于在所述全量遷移模塊進行數(shù)據(jù)遷移之前,將所述待遷移數(shù)據(jù)所使用的庫表列和對象遷移到所述第二數(shù)據(jù)庫,當(dāng)所述第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,通過預(yù)設(shè)的類型映射關(guān)系確定所述庫表列和對象在所述第二數(shù)據(jù)庫中的類型,在所述第二數(shù)據(jù)庫創(chuàng)建與所述類型相對應(yīng)的庫表列和對象。其中,所述系統(tǒng)進一步包括第二遷移評估單元,當(dāng)所述遷移任務(wù)包括遷移評估時,所述第二遷移評估單元,接受所述應(yīng)用程序編程接口模塊的調(diào)用,用于在所述結(jié)構(gòu)遷移模塊對所述待遷移數(shù)據(jù)所使用的庫表列和對象進行遷移之前,根據(jù)所述第一數(shù)據(jù)庫和第二數(shù)據(jù)庫輸出評估報告,其中,所述評估報告包括所述第一數(shù)據(jù)庫的空間占用信息,庫表列和對象信息,執(zhí)行的sql以及處理性能信息,所述評估報告還包括所述第二數(shù)據(jù)庫的不兼容特性信息以及改造成本信息。其中,所述分布式調(diào)度模塊通過統(tǒng)計數(shù)據(jù)遷移系統(tǒng)內(nèi)各個設(shè)備上執(zhí)行的單元化的數(shù)量及內(nèi)存占用率來進行遷移任務(wù)的調(diào)度,以實現(xiàn)各個設(shè)備之間負載均衡。其中,所述全量遷移模塊或所述增量遷移模塊在向所述第二數(shù)據(jù)庫寫入數(shù)據(jù)時,記錄已寫入數(shù)據(jù)的位點信息,用于斷點續(xù)傳。其中,所述全量遷移模塊進一步用于,當(dāng)全量遷移任務(wù)中的第一數(shù)據(jù)庫與第二數(shù)據(jù)庫同構(gòu)時,將待遷移數(shù)據(jù)按照庫表列的當(dāng)前結(jié)構(gòu)進行遷移。其中,所述全量遷移模塊進一步用于,當(dāng)全量遷移任務(wù)中的第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,對于異構(gòu)數(shù)據(jù)庫 之間的數(shù)據(jù)遷移,根據(jù)預(yù)設(shè)的中間格式來完成異構(gòu)數(shù)據(jù)庫之間數(shù)據(jù)類型的轉(zhuǎn)換。其中,所述全量遷移模塊進一步用于,在全量遷移過程中,若遇到第一數(shù)據(jù)庫的庫名、表名、列名與第二數(shù)據(jù)庫的庫名、表名、列名不一致的情況,則依據(jù)預(yù)設(shè)的庫表列的映射規(guī)則進行映射,將庫表列的數(shù)據(jù)寫入到第二數(shù)據(jù)庫對應(yīng)的庫表列。其中,所述增量遷移模塊進一步用于,利用所述第一數(shù)據(jù)庫的日志,或者利用所述第一數(shù)據(jù)庫的觸發(fā)器所保存的操作記錄來獲取在所述第一時刻之后產(chǎn)生變化的數(shù)據(jù)。為了解決上述技術(shù)問題,本申請還公開了一種數(shù)據(jù)遷移方法,一種數(shù)據(jù)遷移方法,包括:接收由客戶端創(chuàng)建的遷移任務(wù)和指定的第一數(shù)據(jù)庫、第二數(shù)據(jù)庫和所述第一數(shù)據(jù)庫的待遷移數(shù)據(jù),其中,所述遷移任務(wù)包括全量遷移,所述第一數(shù)據(jù)庫處于停機狀態(tài);調(diào)用全量遷移模塊將所述待遷移數(shù)據(jù)從所述第一數(shù)據(jù)庫遷移到所述第二數(shù)據(jù)庫,當(dāng)所述第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,通過預(yù)設(shè)的中間格式將所述待遷移數(shù)據(jù)的數(shù)據(jù)類型轉(zhuǎn)換為所述第二數(shù)據(jù)庫的數(shù)據(jù)類型,按照轉(zhuǎn)換后的數(shù)據(jù)類型將所述待遷移數(shù)據(jù)寫入所述第二數(shù)據(jù)庫。其中,當(dāng)所述遷移任務(wù)還包括遷移評估時,在調(diào)用全量遷移模塊之前,所述方法還包括:調(diào)用第一遷移評估單元,根據(jù)所述第一數(shù)據(jù)庫和第二數(shù)據(jù)庫輸出評估報告,其中,所述評估報告包括所述第一數(shù)據(jù)庫的空間占用信息,庫表列和對象信息,執(zhí)行的sql以及處理性能信息,所述評估報告還包括所述第二數(shù)據(jù)庫的不兼容特性信息以及改造成本信息。其中,當(dāng)所述遷移任務(wù)還包括結(jié)構(gòu)遷移時,在調(diào)用全量遷移模塊之前,所述方法還包括:調(diào)用結(jié)構(gòu)遷移模塊將所述待遷移數(shù)據(jù)所使用的庫表列和對象遷移到所述第二數(shù)據(jù)庫,當(dāng)所述第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,通過預(yù)設(shè)的類型映射關(guān)系確定所述庫表列和對象在所述第二數(shù)據(jù)庫中的類型,在所述第二數(shù)據(jù) 庫創(chuàng)建與所述類型相對應(yīng)的庫表列和對象。其中,當(dāng)所述遷移任務(wù)還包括遷移評估時,在調(diào)用結(jié)構(gòu)遷移模塊之前,所述方法還包括:調(diào)用第二遷移評估單元,根據(jù)所述第一數(shù)據(jù)庫和第二數(shù)據(jù)庫輸出評估報告,其中,所述評估報告包括所述第一數(shù)據(jù)庫的空間占用信息,庫表列和對象信息,執(zhí)行的sql以及處理性能信息,所述評估報告還包括所述第二數(shù)據(jù)庫的不兼容特性信息以及改造成本信息。其中,調(diào)用所述全量遷移模塊,將所述待遷移數(shù)據(jù)從所述第一數(shù)據(jù)庫遷移到所述第二數(shù)據(jù)庫時,進一步包括:記錄已寫入數(shù)據(jù)的位點信息,用于斷點續(xù)傳。其中,調(diào)用所述全量遷移模塊,將所述待遷移數(shù)據(jù)寫入所述第二數(shù)據(jù)庫,進一步包括,當(dāng)全量遷移任務(wù)中的第一數(shù)據(jù)庫與第二數(shù)據(jù)庫同構(gòu)時,將待遷移數(shù)據(jù)按照庫表列的當(dāng)前結(jié)構(gòu)進行遷移。其中,調(diào)用全量遷移模塊將所述待遷移數(shù)據(jù)從所述第一數(shù)據(jù)庫遷移到所述第二數(shù)據(jù)庫,進一步包括,當(dāng)全量遷移任務(wù)中的第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,對于異構(gòu)數(shù)據(jù)庫之間的數(shù)據(jù)遷移,根據(jù)預(yù)設(shè)的中間格式來完成異構(gòu)數(shù)據(jù)庫之間數(shù)據(jù)類型的轉(zhuǎn)換。其中,調(diào)用全量遷移模塊將所述待遷移數(shù)據(jù)從所述第一數(shù)據(jù)庫遷移到所述第二數(shù)據(jù)庫,進一步包括,在全量遷移過程中,若遇到第一數(shù)據(jù)庫的庫名、表名、列名與第二數(shù)據(jù)庫的庫名、表名、列名不一致的情況,則依據(jù)預(yù)設(shè)的庫表列的映射規(guī)則進行映射,將庫表列的數(shù)據(jù)寫入到第二數(shù)據(jù)庫對應(yīng)的庫表列。本申請公開一種數(shù)據(jù)遷移方法,其特征在于,包括:接收由客戶端創(chuàng)建的遷移任務(wù)和指定的第一數(shù)據(jù)庫、第二數(shù)據(jù)庫和所述第一數(shù)據(jù)庫的待遷移數(shù)據(jù),其中,所述遷移任務(wù)包括全量遷移、增量遷移,所述第一數(shù)據(jù)庫處于開機狀態(tài);調(diào)用全量遷移模塊將所述待遷移數(shù)據(jù)從所述第一數(shù)據(jù)庫遷移到所述第 二數(shù)據(jù)庫,當(dāng)所述第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,通過預(yù)設(shè)的中間格式將所述待遷移數(shù)據(jù)的數(shù)據(jù)類型轉(zhuǎn)換為所述第二數(shù)據(jù)庫的數(shù)據(jù)類型,按照轉(zhuǎn)換后的數(shù)據(jù)類型將所述待遷移數(shù)據(jù)寫入所述第二數(shù)據(jù)庫;調(diào)用增量遷移模塊,以所述全量遷移開始時的第一時刻為基準(zhǔn),將所述待遷移數(shù)據(jù)在所述第一時刻之后產(chǎn)生變化的數(shù)據(jù)遷移到所述第二數(shù)據(jù)庫,當(dāng)所述第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,通過預(yù)設(shè)的中間格式將所述產(chǎn)生變化的數(shù)據(jù)的數(shù)據(jù)類型轉(zhuǎn)換為所述第二數(shù)據(jù)庫的數(shù)據(jù)類型,按照轉(zhuǎn)換后的數(shù)據(jù)類型將所述產(chǎn)生變化的數(shù)據(jù)寫入所述第二數(shù)據(jù)庫。其中,當(dāng)所述遷移任務(wù)還包括遷移評估時,在調(diào)用全量遷移模塊之前,所述方法還包括:調(diào)用第一遷移評估單元,根據(jù)所述第一數(shù)據(jù)庫和第二數(shù)據(jù)庫輸出評估報告,其中,所述評估報告包括所述第一數(shù)據(jù)庫的空間占用信息,庫表列和對象信息,執(zhí)行的sql以及處理性能信息,所述評估報告還包括所述第二數(shù)據(jù)庫的不兼容特性信息以及改造成本信息。其中,當(dāng)所述遷移任務(wù)還包括結(jié)構(gòu)遷移時,在調(diào)用全量遷移模塊之前,所述方法還包括:調(diào)用結(jié)構(gòu)遷移模塊將所述待遷移數(shù)據(jù)所使用的庫表列和對象遷移到所述第二數(shù)據(jù)庫,當(dāng)所述第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,通過預(yù)設(shè)的類型映射關(guān)系確定所述庫表列和對象在所述第二數(shù)據(jù)庫中的類型,在所述第二數(shù)據(jù)庫創(chuàng)建與所述類型相對應(yīng)的庫表列和對象。其中,當(dāng)所述遷移任務(wù)還包括遷移評估時,在調(diào)用結(jié)構(gòu)遷移模塊之前,所述方法還包括:調(diào)用第二遷移評估單元,根據(jù)所述第一數(shù)據(jù)庫和第二數(shù)據(jù)庫輸出評估報告,其中,所述評估報告包括所述第一數(shù)據(jù)庫的空間占用信息,庫表列和對象信息,執(zhí)行的sql以及處理性能信息,所述評估報告還包括所述第二數(shù)據(jù)庫的不兼容特性信息以及改造成本信息。其中,調(diào)用所述全量遷移模塊或所述增量遷移模塊,將所述待遷移數(shù)據(jù)從所述第一數(shù)據(jù)庫遷移到所述第二數(shù)據(jù)庫時,進一步包括:記錄已寫入數(shù)據(jù)的位點信息,用于斷點續(xù)傳。其中,調(diào)用所述全量遷移模塊,將所述待遷移數(shù)據(jù)寫入所述第二數(shù)據(jù)庫,進一步包括,當(dāng)全量遷移任務(wù)中的第一數(shù)據(jù)庫與第二數(shù)據(jù)庫同構(gòu)時,將待遷移數(shù)據(jù)按照庫表列的當(dāng)前結(jié)構(gòu)進行遷移。其中,調(diào)用全量遷移模塊將所述待遷移數(shù)據(jù)從所述第一數(shù)據(jù)庫遷移到所述第二數(shù)據(jù)庫,進一步包括,當(dāng)全量遷移任務(wù)中的第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,對于異構(gòu)數(shù)據(jù)庫之間的數(shù)據(jù)遷移,根據(jù)預(yù)設(shè)的中間格式來完成異構(gòu)數(shù)據(jù)庫之間數(shù)據(jù)類型的轉(zhuǎn)換。其中,調(diào)用全量遷移模塊將所述待遷移數(shù)據(jù)從所述第一數(shù)據(jù)庫遷移到所述第二數(shù)據(jù)庫,進一步包括,在全量遷移過程中,若遇到第一數(shù)據(jù)庫的庫名、表名、列名與第二數(shù)據(jù)庫的庫名、表名、列名不一致的情況,則依據(jù)預(yù)設(shè)的庫表列的映射規(guī)則進行映射,將庫表列的數(shù)據(jù)寫入到第二數(shù)據(jù)庫對應(yīng)的庫表列。其中,調(diào)用增量遷移模塊,具體包括,利用所述第一數(shù)據(jù)庫的日志,或者利用所述第一數(shù)據(jù)庫的觸發(fā)器所保存的操作記錄來獲取在所述第一時刻之后產(chǎn)生變化的數(shù)據(jù)。其中,所述方法還包括:當(dāng)所述客戶端對所述第一數(shù)據(jù)庫的寫操作已被切換到所述第二數(shù)據(jù)庫時,以所述客戶端向所述第二數(shù)據(jù)庫首次寫入數(shù)據(jù)時的第二時刻為基準(zhǔn),將所述第二數(shù)據(jù)庫在所述第二時刻之后產(chǎn)生變化的數(shù)據(jù)遷移到所述第一數(shù)據(jù)庫;當(dāng)所遷移的在所述第二時刻之后產(chǎn)生變化的數(shù)據(jù)已趕上所述第二數(shù)據(jù)庫當(dāng)前的數(shù)據(jù)變化時,實時的針對在所述第二時刻之后產(chǎn)生變化的數(shù)據(jù)判斷所述第一數(shù)據(jù)庫和第二數(shù)據(jù)庫的數(shù)據(jù)是否一致,將不一致的數(shù)據(jù)記錄在預(yù)設(shè)列表。其中,所述方法還包括:在所述客戶端針對所述第二數(shù)據(jù)庫的訪問出現(xiàn)異常時,將所述客戶端針對所述第二數(shù)據(jù)庫的寫操作切換回所述第一數(shù)據(jù)庫。與現(xiàn)有技術(shù)相比,本申請可以獲得包括以下技術(shù)效果:1)提供了一種支持同構(gòu)及異構(gòu)數(shù)據(jù)庫之間通用的數(shù)據(jù)遷移系統(tǒng),能夠在停機和非停機狀態(tài)下進行全量遷移的完整的數(shù)據(jù)遷移系統(tǒng);2)提供了在全量遷移之前的結(jié)構(gòu)遷移功能,當(dāng)需要遷移的數(shù)據(jù)量較大時,可以節(jié)省大量的時間和人力。3)提供了在非停機狀態(tài)下的增量遷移功能,使新增數(shù)據(jù)得到及時同步。4)數(shù)據(jù)遷移系統(tǒng)還具有分布式調(diào)度功能,能夠提升大數(shù)據(jù)量的數(shù)據(jù)遷移的處理效率;5)在非停機狀態(tài)下進行數(shù)據(jù)遷移時,通過數(shù)據(jù)回流實現(xiàn)數(shù)據(jù)庫之間的數(shù)據(jù)同步,使運行的業(yè)務(wù)可以隨時切換。當(dāng)然,實施本申請的任一產(chǎn)品必不一定需要同時達到以上所述的所有技術(shù)效果。附圖說明此處所說明的附圖用來提供對本申請的進一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:圖1是本申請實施例提供的一種數(shù)據(jù)遷移系統(tǒng)的架構(gòu)示意圖;圖1a是全量遷移模塊131獨立存在時的架構(gòu)示意圖;圖1b是全量遷移模塊131和結(jié)構(gòu)遷移模塊135組合存在時的架構(gòu)示意圖;圖1c是全量遷移模塊131和遷移評估模塊136組合存在時的架構(gòu)示意圖;圖1d是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和遷移評估模塊136組合存在時的架構(gòu)示意圖;圖1e是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和全量校驗?zāi)K133組合存在時的架構(gòu)示意圖;圖1f是全量遷移模塊131和遷移評估模塊136和全量校驗?zāi)K133組合存在時的架構(gòu)示意圖;圖1g是全量遷移模塊131和全量校驗?zāi)K133組合存在時的架構(gòu)示意圖;圖1h是全量遷移模塊131和結(jié)構(gòu)遷移模塊和遷移評估模塊136和全量校驗?zāi)K133組合存在時的架構(gòu)示意圖;圖1i是全量遷移模塊131和增量遷移模塊132組合存在時的架構(gòu)示意圖;圖1j是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和增量遷移模塊132組合存在時的架構(gòu)示意圖;圖1k是全量遷移模塊131和遷移評估模塊136和增量遷移模塊132組合存在時的架構(gòu)示意圖;圖1l是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和增量遷移模塊132和遷移評估模塊136組合存在時的架構(gòu)示意圖;圖1m是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和增量遷移模塊132和全量校驗?zāi)K133組合存在時的架構(gòu)示意圖;圖1n是全量遷移模塊131和遷移評估模塊136和增量遷移模塊132和全量校驗?zāi)K133組合存在時的架構(gòu)示意圖;圖1o是全量遷移模塊131和全量校驗?zāi)K133和增量遷移模塊132組合存在時的架構(gòu)示意圖;圖1p是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和遷移評估模塊136和全量校驗?zāi)K133和增量遷移模塊132組合存在時的架構(gòu)示意圖;圖1q是全量遷移模塊131和增量遷移模塊132組合存在時的架構(gòu)示意圖和增校驗?zāi)K134組合存在時的架構(gòu)示意圖;圖1r是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和增量遷移模塊132和增校驗?zāi)K134組合存在時的架構(gòu)示意圖;圖1s是全量遷移模塊131和遷移評估模塊136和增量遷移模塊132和增 校驗?zāi)K134組合存在時的架構(gòu)示意圖;圖1t是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和增量遷移模塊132和遷移評估模塊136和增校驗?zāi)K134組合存在時的架構(gòu)示意圖;圖1u是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和增量遷移模塊132和全量校驗?zāi)K133和增校驗?zāi)K134組合存在時的架構(gòu)示意圖;圖1v是全量遷移模塊131和遷移評估模塊136和增量遷移模塊132和全量校驗?zāi)K133和增校驗?zāi)K134組合存在時的架構(gòu)示意圖;圖1w是全量遷移模塊131和全量校驗?zāi)K133和增量遷移模塊132和增校驗?zāi)K134組合存在時的架構(gòu)示意圖;圖1x是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和遷移評估模塊136和全量校驗?zāi)K133和增量遷移模塊132和增校驗?zāi)K134組合存在時的架構(gòu)示意圖;圖2是本申請實施例分布式調(diào)度模塊針對遷移任務(wù)提供的狀態(tài)機的狀態(tài)變化示意圖;圖3是本申請實施例通過中間格式完成異構(gòu)數(shù)據(jù)庫之間類型轉(zhuǎn)換的示意圖;圖4是本申請實施例提供的一種數(shù)據(jù)遷移方法的流程示意圖;圖5是本申請實施例提供的一種數(shù)據(jù)遷移方法的流程示意圖;圖6是本申請實施例提供的一種數(shù)據(jù)遷移方法的流程示意圖;圖7a是本申請實施例提供的一種數(shù)據(jù)遷移方法的流程示意圖;圖7b是本申請實施例提供的一種數(shù)據(jù)遷移方法的流程示意圖;圖8a是本申請實施例提供的一種數(shù)據(jù)遷移方法的流程示意圖;圖8b是本申請實施例提供的一種數(shù)據(jù)遷移方法的流程示意圖;圖9是本申請實施例提供的一種數(shù)據(jù)遷移方法的流程示意圖;圖10是本申請實施例提供的一種數(shù)據(jù)遷移方法的流程示意圖;圖11是本申請實施例提供的一種數(shù)據(jù)遷移方法的流程示意圖。具體實施方式以下將配合附圖及實施例來詳細說明本申請的實施方式,藉此對本申請如何應(yīng)用技術(shù)手段來解決技術(shù)問題并達成技術(shù)功效的實現(xiàn)過程能充分理解并據(jù)以實施。本申請實施例提出了一種數(shù)據(jù)遷移系統(tǒng),提供全量遷移、增量遷移、全量校驗、增量校驗、遷移評估和結(jié)構(gòu)遷移等類型的遷移服務(wù)。利用該數(shù)據(jù)遷移系統(tǒng),同構(gòu)或者異構(gòu)數(shù)據(jù)庫之間都可以完成數(shù)據(jù)遷移,并且對全量遷移的數(shù)據(jù)進行全量校驗,對增量遷移的數(shù)據(jù)進行增量校驗。在數(shù)據(jù)遷移開始之前還可以進行遷移評估和結(jié)構(gòu)遷移,以分析遷移的可行性和提高數(shù)據(jù)遷移的效率。無論在源數(shù)據(jù)庫運行的業(yè)務(wù)允許停機還是不允許停機的情況下,都可以利用該數(shù)據(jù)遷移系統(tǒng)將業(yè)務(wù)數(shù)據(jù)從源數(shù)據(jù)庫遷移到目標(biāo)數(shù)據(jù)庫,在源數(shù)據(jù)庫不允許停機的情況下,可以實現(xiàn)源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫之間的數(shù)據(jù)同步,從而使針對業(yè)務(wù)數(shù)據(jù)的訪問可以隨時進行切換。圖1是本申請實施例提供的一種數(shù)據(jù)遷移系統(tǒng)的架構(gòu)示意圖,包括入口(portal)模塊10,應(yīng)用程序編程接口(applicationprogramminginterface,api)模塊11,分布式調(diào)度模塊12,全量遷移模塊131,增量遷移模塊132,全量校驗?zāi)K133,增量校驗?zāi)K134,結(jié)構(gòu)遷移模塊135和遷移評估模塊136。入口模塊10提供管理遷移任務(wù)的入口,通過該入口模塊10客戶端可完成遷移任務(wù)的創(chuàng)建、啟動、管理、進度查詢等配置。入口模塊10可通過開源的入口(portal)軟件來實現(xiàn),例如liferayportal,支持異步j(luò)avascript和xml(asynchronousjavascriptandxml,ajax)和java規(guī)范要求(javaspecificationrequest,jsr)286標(biāo)準(zhǔn),創(chuàng)建數(shù)據(jù)遷移系統(tǒng)的管理控制臺應(yīng)用程序,在客戶端展示該管理控制臺應(yīng)用程序的交互界面。用戶可以在交互界面中創(chuàng)建遷移任務(wù)并指定源數(shù)據(jù)庫、目標(biāo)數(shù)據(jù)庫和源數(shù)據(jù)庫中的待遷移數(shù)據(jù)。在進入數(shù)據(jù)遷移系統(tǒng)的管理控制臺之前,還需要在云服務(wù)控制臺創(chuàng)建目標(biāo)服務(wù)器中的第二數(shù)據(jù)庫,數(shù)據(jù)遷移系統(tǒng)可以自動在目標(biāo)服務(wù)器中創(chuàng)建第二數(shù)據(jù)庫,自動創(chuàng)建的第二數(shù)據(jù)庫的名稱與源服務(wù)器的第一數(shù)據(jù)庫的名稱相 同,如果用戶想要第二數(shù)據(jù)庫的名稱與第一數(shù)據(jù)庫不同,也可以自定義第二數(shù)據(jù)庫的名稱。然后,創(chuàng)建源服務(wù)器和目標(biāo)服務(wù)器的所使用的賬號,以確保本次遷移任務(wù)具有源服務(wù)器的讀取權(quán)限和目標(biāo)服務(wù)器的寫入權(quán)限。其中,源服務(wù)器和目標(biāo)服務(wù)器也可以是分別運行在兩個服務(wù)器上的實例。進入數(shù)據(jù)遷移系統(tǒng)的管理控制臺,開始創(chuàng)建遷移任務(wù),首先為創(chuàng)建的遷移任務(wù)設(shè)置任務(wù)名稱,例如,任務(wù)名稱為“abc_北京到杭州”、“bcd_本地到青島”等等。任務(wù)名稱設(shè)置完成后,開始填寫源服務(wù)器和目標(biāo)服務(wù)器的連接信息,包括源服務(wù)器的實例類型,例如,“有公網(wǎng)ip的自建數(shù)據(jù)庫”;源服務(wù)器的第一數(shù)據(jù)庫類型,例如,oracle、mysql等;源服務(wù)器的主機名稱或ip地址以及端口號,例如201.165.1.112:3308;源服務(wù)器的賬號和密碼,該賬號需要具有針對源服務(wù)器的數(shù)據(jù)讀取權(quán)限;目標(biāo)服務(wù)器的實例類型,例如,關(guān)系型數(shù)據(jù)庫服務(wù)(relationaldatabaseservice,rds)實例;目標(biāo)服務(wù)器的rds實例標(biāo)識,例如“rds2afnbt”;目標(biāo)服務(wù)器的賬號和密碼,該賬號需要具有針對目標(biāo)服務(wù)器的數(shù)據(jù)寫入權(quán)限。源服務(wù)器和目標(biāo)服務(wù)器的連接信息填寫完畢之后,選擇遷移類型和待遷移數(shù)據(jù)。在交互界面中,提供全量遷移、增量遷移、全量校驗、增量校驗、結(jié)構(gòu)遷移、遷移評估等遷移類型的選項供用戶選擇,遷移類型可以默認為全量遷移,并根據(jù)用戶需要添加其他的遷移類型。待遷移數(shù)據(jù)可以選擇一個或多個數(shù)據(jù)庫集合(schema),也可以是某個集合內(nèi)部的一個或多個表,例如,待遷移數(shù)據(jù)可以設(shè)置為數(shù)據(jù)庫集合“amptest1”,或者是數(shù)據(jù)庫集合“amptest1”中的一個表“a00_full_type_table_m1b1”。如果用戶想要目標(biāo)服務(wù)器中創(chuàng)建的第二數(shù)據(jù)庫的名稱與選擇的待遷移數(shù)據(jù)的名稱不一致,需要在此時配置庫名映射關(guān)系,例如,將選中的待遷移數(shù)據(jù)“amptest1”的名稱映射配置為“l(fā)iuy_amptest1”。上述配置完成后,在數(shù)據(jù)遷移系統(tǒng)的管理控制臺啟動遷移任務(wù),在界面中可以看到該遷移任務(wù)的當(dāng)前執(zhí)行的遷移類型和進度,例如,結(jié)構(gòu)遷移已完成80%,全量遷移已完成100%。客戶端向入口模塊10發(fā)起超文本傳輸協(xié)議(hypertexttransferprotocol, http)請求,入口模塊10接收并解析出由客戶端創(chuàng)建的遷移任務(wù),根據(jù)遷移任務(wù)調(diào)用數(shù)據(jù)遷移系統(tǒng)的開放式api。應(yīng)用程序編程接口模塊11用于向客戶端提供可調(diào)用的遷移類型的接口,以根據(jù)所述遷移任務(wù)中的遷移類型調(diào)用對應(yīng)的全量遷移模塊131,增量遷移模塊132,全量校驗?zāi)K133,增量校驗?zāi)K134,結(jié)構(gòu)遷移模塊135和遷移評估模塊136中的一個或多個。可通過http或者基于安全套接層的超文本傳輸協(xié)議(hypertexttransferprotocoloversecuresocketlayer,https)向api模塊11發(fā)送調(diào)用請求。支持httpget方法發(fā)送請求,每個請求需要制定要執(zhí)行的操作,即action參數(shù),例如,創(chuàng)建數(shù)據(jù)庫、全量遷移、增量遷移等等。分布式調(diào)度模塊12用于監(jiān)控各遷移任務(wù)的執(zhí)行狀態(tài),并根據(jù)各個設(shè)備的當(dāng)前負載對遷移任務(wù)進行調(diào)度,以實現(xiàn)各個設(shè)備的負載均衡。分布式調(diào)度模塊12提供狀態(tài)機來對每個遷移任務(wù)的運行狀態(tài)進行監(jiān)控,狀態(tài)機的運行示意圖如圖2所示,狀態(tài)機共包括七種狀態(tài),分別是:初始化(init),運行(running),已趕上(catch),已暫停(paused),已停止(finished),已失敗(failed),已成功(successful)。以上七種狀態(tài)的轉(zhuǎn)換過程如圖2所示,其中,時間(time)代表增量遷移過程的延續(xù)時長(例如15分鐘),當(dāng)增量遷移的持續(xù)時長小于該預(yù)設(shè)時間時說明已趕上當(dāng)前的數(shù)據(jù)變化,達到已趕上(catch)狀態(tài);暫停(pause)代表客戶端選擇暫停任務(wù);殺死(kill)代表該任務(wù)被殺死;異常(unusual)代表捕獲到異常情況,例如,目標(biāo)服務(wù)器實例被鎖定,導(dǎo)致輸入的賬號的數(shù)據(jù)寫入權(quán)限被回收。如果配置的遷移任務(wù)中包括全量遷移而不包括增量遷移,則在全量遷移任務(wù)結(jié)束時從運行狀態(tài)變化為已成功狀態(tài);如果配置的遷移任務(wù)包括全量遷移和增量遷移,則在增量遷移任務(wù)結(jié)束時從運行狀態(tài)變化為已成功狀態(tài)。分布式調(diào)度模塊12可通過統(tǒng)計數(shù)據(jù)遷移系統(tǒng)內(nèi)各個設(shè)備上執(zhí)行的單元化的數(shù)量及內(nèi)存占用率來進行遷移任務(wù)的調(diào)度,以實現(xiàn)各個設(shè)備之間負載均衡。全量遷移模塊131用于將待遷移數(shù)據(jù)從第一數(shù)據(jù)庫遷移到第二數(shù)據(jù)庫。如果在第一數(shù)據(jù)庫處于停機狀態(tài)時進行全量遷移,則將第一數(shù)據(jù)庫當(dāng)前保存 待遷移數(shù)據(jù)遷移至第二數(shù)據(jù)庫;如果第一數(shù)據(jù)庫未停機,則以全量遷移任務(wù)開始執(zhí)行時的第一時刻為基準(zhǔn),將在第一時刻保存的待遷移數(shù)據(jù)遷移到第二數(shù)據(jù)庫。第一數(shù)據(jù)庫與第二數(shù)據(jù)庫同構(gòu)是指兩個數(shù)據(jù)庫的表的結(jié)構(gòu)相同,第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)是指兩個數(shù)據(jù)庫的表的結(jié)構(gòu)不同。當(dāng)全量遷移任務(wù)中的第一數(shù)據(jù)庫與第二數(shù)據(jù)庫同構(gòu)時,將待遷移數(shù)據(jù)按照庫表列的當(dāng)前結(jié)構(gòu)進行遷移。當(dāng)全量遷移任務(wù)中的第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,對于異構(gòu)數(shù)據(jù)庫之間的數(shù)據(jù)遷移,根據(jù)預(yù)設(shè)的中間格式來完成異構(gòu)數(shù)據(jù)庫之間數(shù)據(jù)類型的轉(zhuǎn)換。如圖3所示,將第一數(shù)據(jù)庫的數(shù)據(jù)類型轉(zhuǎn)換為中間格式,再從該中間格式轉(zhuǎn)換為第二數(shù)據(jù)庫的數(shù)據(jù)類型。這樣處理的優(yōu)勢在于,不需要對每種類型的數(shù)據(jù)庫的分別開發(fā)出針對其他類型的數(shù)據(jù)庫的轉(zhuǎn)換方法。例如,圖3所示的七種數(shù)據(jù)庫,如果為這七種數(shù)據(jù)庫分別開發(fā)針對其他類型的數(shù)據(jù)庫的轉(zhuǎn)換方法,共需要四十二種轉(zhuǎn)換方法;而采用這種通過中間格式進行轉(zhuǎn)換的方式,針對七種數(shù)據(jù)庫分別開發(fā)一種讀取方法,將七種數(shù)據(jù)庫的數(shù)據(jù)讀取為中間格式,再針對七種數(shù)據(jù)庫分別開發(fā)一種寫入方法,將已讀取為中間格式的數(shù)據(jù)寫入到不同的數(shù)據(jù)庫。這樣,需要開發(fā)十四種轉(zhuǎn)換方法即可實現(xiàn)七種數(shù)據(jù)庫之間的類型轉(zhuǎn)換,提高了開發(fā)效率,使不同類型的數(shù)據(jù)庫之間的數(shù)據(jù)類型轉(zhuǎn)換更加容易實現(xiàn)。上述預(yù)設(shè)的中間格式包括java語言的字符串(string)數(shù)組和字節(jié)(byte)數(shù)組。其中,在從第一數(shù)據(jù)庫讀取數(shù)據(jù)時,將第一數(shù)據(jù)庫的二進制數(shù)據(jù)類型轉(zhuǎn)換為字節(jié)數(shù)組的形式進行保存,將其他數(shù)據(jù)類型都轉(zhuǎn)換為字符串?dāng)?shù)組的形式進行保存。在向第二數(shù)據(jù)庫寫入數(shù)據(jù)時,再將字符串?dāng)?shù)組和字節(jié)數(shù)組保存的數(shù)據(jù)轉(zhuǎn)換為與被寫入的列相對應(yīng)的類型。例如,以從oracle向mysql的數(shù)據(jù)遷移為例,讀取oracle數(shù)據(jù)時,將oracle的二進制大對象(binarylargeobject,blob)類型、binary_float和binary_double等二進制浮點類型的數(shù)據(jù)轉(zhuǎn)換為java的字節(jié)(byte)數(shù)組進行保存,將oracle的varchar2、nvarchar2等其他類型的數(shù)據(jù)轉(zhuǎn)換為java的字符串(string)數(shù)組的形式進行保存,從而將oracle數(shù)據(jù)庫中的待遷移數(shù)據(jù)保存為中間格式。將中間格式的待遷移數(shù)據(jù)寫入mysql時,將blob類型對應(yīng)的 字節(jié)數(shù)組轉(zhuǎn)換為mysql的longblob類型,將binary_float類型對應(yīng)的字節(jié)數(shù)組轉(zhuǎn)換為mysql的decimal類型,將binary_double的數(shù)據(jù)類型轉(zhuǎn)換為mysql的double類型,而varchar2類型對應(yīng)的字符串?dāng)?shù)組轉(zhuǎn)換為mysql的varchar類型,nvarchar2類型對應(yīng)的字符串?dāng)?shù)組轉(zhuǎn)換為mysql的nationalvarchar類型,其他類型對應(yīng)的字符串?dāng)?shù)組也相應(yīng)的轉(zhuǎn)換為在mysql數(shù)據(jù)庫中對應(yīng)的類型并寫入mysql數(shù)據(jù)庫。如圖3所示,通過該中間格式可實現(xiàn)mysql、oracle、sqlserver、高性能分布式數(shù)據(jù)庫系統(tǒng)oceanbase、對象——關(guān)系型數(shù)據(jù)庫管理系統(tǒng)postgresql、開放結(jié)構(gòu)化數(shù)據(jù)服務(wù)ots、分布式面向列的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)hbasesqlserver等七種數(shù)據(jù)庫的類型轉(zhuǎn)換,提高了開發(fā)效率。其中,在全量遷移模塊131配置一個白名單,客戶端選擇全量遷移做為遷移類型時,如果指定了第一數(shù)據(jù)庫中需要遷移的表,則將指定的表的名稱添加到這個白名單;如果需要將第一數(shù)據(jù)庫整體進行遷移,則這個白名單為空。在全量遷移開始時,根據(jù)該白名單確定需要遷移的表或者對第一數(shù)據(jù)庫整體進行遷移。而在一個實施例中,可以在進行遷移之前,對需要遷移的表進行切分,該切分可通過現(xiàn)有的表切分算法實現(xiàn),將需要遷移的表切分成多個子任務(wù)分別異步處理,以提高全量遷移的效率。例如,可以使用水平切分、垂直切分或者散列切分算法實現(xiàn)對表的切分;其中,水平切分根據(jù)某些條件將數(shù)據(jù)放到兩個或多個獨立的表中,即按記錄進行切分,不同的記錄可以分開保存,每個子表的列數(shù)相同,切分后可以降低在查詢時需要讀取的數(shù)據(jù)和索引的頁數(shù),同時也降低了索引的層數(shù),加快了查詢速度;垂直切分把主鍵和一些列放到一個表,然后把主鍵和另外的一些列放到另一個表中,將原始表分成多個只包含較少列的表,使得行數(shù)據(jù)變小,一個數(shù)據(jù)塊(block)就能存放更多的數(shù)據(jù),在查詢時就會減少i/o次數(shù);散列切分采用散列(hash)算法把數(shù)據(jù)分散到各個分表中,這樣i/o更加均衡。在全量遷移過程中,如果遇到第一數(shù)據(jù)庫的庫名、表名、列名與第二數(shù)據(jù)庫的庫名、表名、列名不一致的情況,會依據(jù)預(yù)設(shè)的庫表列的映射規(guī)則進行映射,將庫表列的數(shù)據(jù)寫入到在第二數(shù)據(jù)庫對應(yīng)的庫表列。在遷移任務(wù)開 始之前,在選擇待遷移數(shù)據(jù)時,可以對庫名不一致情況進行設(shè)置,在此不再重復(fù)說明。而對于表名和列名不一致的情況,也同樣需要預(yù)設(shè)表名和列名的映射規(guī)則。例如:而在一個實施例中,可以在每次向第二數(shù)據(jù)庫寫入數(shù)據(jù)之后,記錄已寫入的待遷移數(shù)據(jù)的存儲位置信息,以用于斷點續(xù)傳?!癿apperlist=db_1;table_1;*=db_1;table_2;*|db_1;table_2;usename=db_1;table_2;uname”。其中“|”用于分隔兩個映射規(guī)則,db_1;table_1;*=db_1;table_2;*表示數(shù)據(jù)庫db_1的表table_1映射為table_2也就是表的名稱有變化。db_1;table_2;usename=db_1;table_2;uname表示數(shù)據(jù)庫db_1的表table_2的字段username映射為table_2的列為uname,即列名稱也相應(yīng)的有變化。而在一個實施例中,可以在每次向第二數(shù)據(jù)庫寫入數(shù)據(jù)之后,記錄已寫入的待遷移數(shù)據(jù)的位點信息,以用于斷點續(xù)傳。例如,在目標(biāo)服務(wù)器中創(chuàng)建一個表increment_trx,表increment_trx是目標(biāo)服務(wù)器中創(chuàng)建的位點表,主要用于記錄全量遷移的位點,解決任務(wù)異常重啟后的斷點續(xù)傳問題。結(jié)構(gòu)遷移模塊135,用于在全量遷移模塊131進行數(shù)據(jù)遷移之前,將待遷移數(shù)據(jù)所使用的庫表列和對象遷移到第二數(shù)據(jù)庫,當(dāng)?shù)谝粩?shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,通過預(yù)設(shè)的類型映射關(guān)系確定所述庫表列和對象在第二數(shù)據(jù)庫中的類型,在第二數(shù)據(jù)庫創(chuàng)建與所述類型相對應(yīng)的庫表列和對象。當(dāng)需要進行全量遷移的數(shù)據(jù)非常多時,全量遷移的過程會較為緩慢,耗費過多時間和人力,例如要對幾百個數(shù)據(jù)庫的幾千張表的數(shù)據(jù)進行遷移時,以上問題就會愈發(fā)明顯。因此,在創(chuàng)建較大數(shù)據(jù)量的遷移任務(wù)時,可以由用戶在遷移類型中選擇結(jié)構(gòu)遷移,也可以由數(shù)據(jù)遷移系統(tǒng)在判斷出遷移任務(wù)所配置的待遷移數(shù)據(jù)的數(shù)據(jù)量超過預(yù)設(shè)門限時,自動在全量遷移之前進行結(jié)構(gòu)遷移。例如,源服務(wù)器中的第一數(shù)據(jù)庫為oracle數(shù)據(jù)庫,目標(biāo)服務(wù)器中的第二數(shù)據(jù)庫為mysql數(shù)據(jù)庫,并指定oracle數(shù)據(jù)庫中表名為"dbtest"."tabletest"的表做為待遷移數(shù)據(jù),該表的結(jié)構(gòu)中包括如下各列:("c_id"number(20,0),"c_num_1"number,"c_num_2"number(38,0),"c_num_3"number(20,3),"c_float_1"binary_float,"c_float_2"binary_double,"c_date_1"date,"c_date_2"timestamp(6),"c_date_3"timestamp(6),"c_date_4"timestamp(6)withtimezone,"c_date_5"timestamp(6)withlocaltimezone,"c_string_1"char(40char),"c_string_2"char(40byte),"c_string_3"nchar(40),"c_string_4"varchar2(40byte),"c_string_5"varchar2(40char),"c_string_6"nvarchar2(40),"c_string_7"clob,"c_string_8"nclob,"c_string_9"long,"c_blob_1"blob,"c_blob_2"raw(200))。如果用戶選擇遷移類型時選擇了結(jié)構(gòu)遷移,那么結(jié)構(gòu)遷移模塊135首先在mysql數(shù)據(jù)庫中創(chuàng)建相應(yīng)的表,如果用戶沒有預(yù)設(shè)表名的映射,則在mysql數(shù)據(jù)庫中創(chuàng)建具有相同名稱的表`dbtest.`tabletest`。創(chuàng)建的表`dbtest.`tabletest`也具備相應(yīng)的列,創(chuàng)建該表的代碼如下:createtable`dbtest.`tabletest`(`c_id`decimal(20,0)notnull,`c_num_1`bigintnotnull,`c_num_2`decimal(38,0)notnull,`c_num_3`decimal(20,3)notnull,`c_float_1`decimal(65,8),`c_float_2`double,`c_date_1`datetime,`c_date_2`datetime,`c_date_3`datetime,`c_date_4`datetime,`c_date_5`datetime,`c_string_1`char(40),`c_string_2`char(40),`c_string_3`varchar(40),`c_string_4`varchar(40),`c_string_5`varchar(40),`c_string_6`varchar(40),`c_string_7`longtext,`c_string_8`longtext,`c_string_9`long,`c_blob_1`longblob,`c_blob_2`varbinary(200))engine=innodbcharset=utf8collateutf8_bin;從而在mysql數(shù)據(jù)庫中創(chuàng)建相應(yīng)的表`dbtest.`tabletest`,該表與oracle數(shù)據(jù)庫的表"dbtest"."tabletest"具有對應(yīng)的列,從而在實際數(shù)據(jù)進行遷移之前將待遷移的表"dbtest"."tabletest"的結(jié)構(gòu)率先遷移到了mysql數(shù)據(jù)庫。在遷移的過程中,根據(jù)“從oracle到mysql”的類型映射關(guān)系完成對每個列的類型轉(zhuǎn)換,比如上例中oracle的列“c_id”類型為number,在mysql數(shù)據(jù)庫創(chuàng)建的表內(nèi),相應(yīng)的列“c_id”類型為decimal,其他列亦進行相應(yīng)的轉(zhuǎn)換,在此不一一列舉。用戶創(chuàng)建遷移任務(wù),在選擇待遷移數(shù)據(jù)時除了可以設(shè)置庫名的映射關(guān)系,還可以設(shè)置表名和列名的映射關(guān)系。當(dāng)選擇了第一數(shù)據(jù)庫中的表做為待 遷移數(shù)據(jù)時,可以預(yù)設(shè)該表在第二數(shù)據(jù)庫中的表名。在設(shè)置該表在第二數(shù)據(jù)庫中的表名的界面中,展示該表內(nèi)部所有的列,用戶可以設(shè)置每個列在第二數(shù)據(jù)庫的表中的列名。例如,用戶選中了第一數(shù)據(jù)庫中的表chinese_key_table做為待遷移數(shù)據(jù),選中該表后可以打開一個編輯頁面,設(shè)置該表在第二數(shù)據(jù)庫中對應(yīng)的表的名稱chinese_key_table_test;在該界面中,同時展示待遷移的表chinese_key_table中各個列:c、id、k、pad等列,并且用戶可以對各個列的列名重新進行編輯,例如將各列的列名修改為c_test、id_test、k_test、pad_test。遷移評估模塊136,用于在全量遷移模塊131對待遷移數(shù)據(jù)的進行遷移之前,或者在結(jié)構(gòu)遷移模塊135對待遷移數(shù)據(jù)所使用的庫表列和對象進行遷移之前,根據(jù)第一數(shù)據(jù)庫和第二數(shù)據(jù)庫輸出評估報告,其中,評估報告包括所述第一數(shù)據(jù)庫的空間占用信息,庫表列和對象信息,執(zhí)行的sql以及處理性能信息,評估報告還包括第二數(shù)據(jù)庫的不兼容特性信息以及改造成本信息。例如,從oracle數(shù)據(jù)庫選中數(shù)據(jù)庫集合amptest1和amptest2做為待遷移數(shù)據(jù),遷移到mysql數(shù)據(jù)庫對應(yīng)的數(shù)據(jù)庫集合liuy_amptest1和liuy_amptest2。那么在開始全量遷移或者結(jié)構(gòu)遷移之前,輸出評估報告,評估報告內(nèi)容包括:oracle數(shù)據(jù)庫當(dāng)前空間占用500gb,可用空間1.5tb,包括200個庫,5000張表和每張表的平均列數(shù)為35,支持sql標(biāo)準(zhǔn)的where條件,目前內(nèi)存占用25%;本次遷移amptest1和amptest2兩個庫,共有55張表,每張表的平均列數(shù)為30,目標(biāo)mysql數(shù)據(jù)庫liuy_amptest1和liuy_amptest2不支持oracle中的bfile、intervalyeartomonth、intervaldaytosecond這幾種數(shù)據(jù)類型,遷移時如果amptest1和amptest2的表中含有這三種類型,會導(dǎo)致結(jié)構(gòu)遷移失敗,請根據(jù)業(yè)務(wù)需求,將這三種類型對應(yīng)的數(shù)據(jù)預(yù)先寫入liuy_amptest1和liuy_amptest2,改造時間大約需要24小時。全量校驗?zāi)K133,用于當(dāng)全量遷移模塊131完成數(shù)據(jù)遷移時,針對全量遷移模塊131所遷移的待遷移數(shù)據(jù)判斷第一數(shù)據(jù)庫與第二數(shù)據(jù)庫的數(shù)據(jù)是否一致,并將不一致的數(shù)據(jù)保存在預(yù)設(shè)列表;當(dāng)預(yù)設(shè)列表內(nèi)存在不一致的數(shù) 據(jù)時,每隔預(yù)設(shè)時長對不一致的數(shù)據(jù)進行重復(fù)校驗,在經(jīng)過預(yù)設(shè)次數(shù)的重復(fù)校驗之后不一致的數(shù)據(jù)仍然存在時,將不一致的數(shù)據(jù)記錄在遷移評估報告內(nèi)。全量校驗?zāi)K133同樣會根據(jù)全量遷移模塊131的白名單確定需要進行全量校驗的表,當(dāng)將整個數(shù)據(jù)庫集合進行全量遷移時,白名單為空,則對整個數(shù)據(jù)庫集合內(nèi)的數(shù)據(jù)進行校驗。而在第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,同樣需要先讀取待遷移數(shù)據(jù)并轉(zhuǎn)換為預(yù)設(shè)的中間格式,通過該中間格式轉(zhuǎn)換為第二數(shù)據(jù)庫的類型,再與第二數(shù)據(jù)庫中相應(yīng)的數(shù)據(jù)進行比對。在第一數(shù)據(jù)庫處于停機和非停機狀態(tài)下,完成全量遷移后都可以繼續(xù)進行全量校驗。而在非停機狀態(tài)下,是以全量遷移開始時的第一時刻為基準(zhǔn)進行數(shù)據(jù)遷移的,在全量遷移的過程中,可能有新的寫操作修改了待遷移數(shù)據(jù),使寫入第二數(shù)據(jù)庫的數(shù)據(jù)與修改之后的待遷移數(shù)據(jù)不一致。例如,oracle數(shù)據(jù)庫中表"dbtest"."tabletest"的數(shù)據(jù)全量遷移到mysql的表`dbtest.`tabletest`后,對應(yīng)的列"c_date_1"與`c_date_1`的日期值不一致,可能是在遷移過程中時間發(fā)生了變化,那么將對應(yīng)的列"c_date_1"與`c_date_1`記錄在預(yù)設(shè)列表中,每隔預(yù)設(shè)時長(例如3秒)進行一次重復(fù)校驗,如果經(jīng)過預(yù)設(shè)次數(shù)(例如,20次)的重復(fù)校驗不一致的數(shù)據(jù)仍然存在,則記錄在遷移報告內(nèi)。該遷移報告內(nèi)表記錄從表"dbtest"."tabletest"到表`dbtest.`tabletest`全量遷移已完成,但存在不一致的數(shù)據(jù):對應(yīng)的列"c_date_1"與`c_date_1`。增量遷移模塊132,用于以全量遷移開始時的第一時刻為基準(zhǔn),將待遷移數(shù)據(jù)在第一時刻之后產(chǎn)生變化的數(shù)據(jù)遷移到第二數(shù)據(jù)庫,當(dāng)?shù)谝粩?shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,通過預(yù)設(shè)的中間格式將產(chǎn)生變化的數(shù)據(jù)的數(shù)據(jù)類型轉(zhuǎn)換為第二數(shù)據(jù)庫的數(shù)據(jù)類型,按照轉(zhuǎn)換后的數(shù)據(jù)類型將產(chǎn)生變化的數(shù)據(jù)寫入第二數(shù)據(jù)庫。增量遷移在全量遷移結(jié)束時開始進行,可以通過解析日志數(shù)據(jù)或者解析觸發(fā)器的操作記錄實現(xiàn),下面分別進行說明。通過解析日志數(shù)據(jù)實現(xiàn)時,增量遷移模塊132讀取第一數(shù)據(jù)庫的日志,例如,當(dāng)?shù)谝粩?shù)據(jù)庫為mysql時讀取二進制日志(binlog),為oracle時讀 取(重做日志)redolog。將讀取到的日志內(nèi)容進行解析并轉(zhuǎn)換成預(yù)設(shè)的中間格式(java語言的字節(jié)數(shù)組和字符串?dāng)?shù)組)并寫入隊列(queue),讀取隊列中的中間格式的數(shù)據(jù)。通過白名單確定需要讀取的數(shù)據(jù),該白名單即為全量遷移時創(chuàng)建的白名單。比如,白名單包括表"dbtest"."tabletest",則從oracle的重做日志中過濾出針對這個表的數(shù)據(jù),完成類型轉(zhuǎn)換等操作后寫入mysql的表`dbtest.`tabletest`。在從隊列讀取數(shù)據(jù)并寫入到第二數(shù)據(jù)庫的過程中,可以通過多線程的并發(fā)操作來完成,以提高增量遷移效率。通過解析日志數(shù)據(jù)的方式實現(xiàn)的增量遷移支持事務(wù)性的寫入,所謂事務(wù)性,是指作為單個邏輯工作單元執(zhí)行的一系列操作,要么完全地執(zhí)行,要么完全地不執(zhí)行。事務(wù)處理可以確保除非事務(wù)性單元內(nèi)的所有操作都成功完成,否則不會永久更新面向數(shù)據(jù)的資源。一個邏輯工作單元要成為事務(wù),必須滿足所謂的acid(原子性、一致性、隔離性和持久性)屬性。事務(wù)是數(shù)據(jù)庫運行中的一個邏輯工作單位,由數(shù)據(jù)庫管理系統(tǒng)(databasemanagementsystem,dbms)中的事務(wù)管理子系統(tǒng)負責(zé)事務(wù)的處理。也就是說,客戶端在第一數(shù)據(jù)庫以一下事務(wù)提交寫入到第一數(shù)據(jù)庫中的數(shù)據(jù),增量遷移時也是以一個事務(wù)寫入到第二數(shù)據(jù)庫。這對于不能接受數(shù)據(jù)中間狀態(tài)的應(yīng)用至關(guān)重要,例如轉(zhuǎn)賬匯款,網(wǎng)絡(luò)購物時貨物的庫存信息等,用戶在客戶端轉(zhuǎn)賬操作未完成或者購物流程未結(jié)束時,雖然表中的有些數(shù)據(jù)已發(fā)生變化,但不會進行增量遷移,直到轉(zhuǎn)賬或者購物操作結(jié)束后對所有已變化的數(shù)據(jù)進行增量遷移。通過觸發(fā)器實現(xiàn)時,增量遷移模塊132通過第一數(shù)據(jù)庫的觸發(fā)器功能記錄第一時刻之后數(shù)據(jù)操作語言(datamanipulationlanguage,dml)的操作并寫入到增量表中;讀取增量表中的信息并反查第一數(shù)據(jù)庫中的相應(yīng)數(shù)據(jù),將查詢到的數(shù)據(jù)轉(zhuǎn)換為預(yù)設(shè)的中間格式(java語言的字節(jié)數(shù)組和字符串?dāng)?shù)組)并寫入到隊列中;從隊列中讀取并通過類型轉(zhuǎn)換處理后寫入到第二數(shù)據(jù)庫。其中,增量表保存的是主鍵信息,不是原始數(shù)據(jù),因此需要根據(jù)主鍵信息反查獲得原始數(shù)據(jù)。例如,全量遷移開始后,客戶端寫oracle數(shù)據(jù)庫的表"dbtest"."tabletest",觸發(fā)器在增量表中記錄主鍵信息id=1,增量遷移開始后,讀取到增量表主鍵信息id=1時反查到對應(yīng)的寫入數(shù)據(jù)"c_string_1"=fh2aje。增量校驗?zāi)K134,用于當(dāng)增量遷移模塊132所遷移的在第一時刻之后產(chǎn)生變化的數(shù)據(jù)已趕上待遷移數(shù)據(jù)當(dāng)前的數(shù)據(jù)變化時,實時的針對第一時刻之后產(chǎn)生變化的數(shù)據(jù)判斷第一數(shù)據(jù)庫和第二數(shù)據(jù)庫的數(shù)據(jù)是否一致,并將不一致的數(shù)據(jù)記錄在預(yù)設(shè)列表;當(dāng)預(yù)設(shè)列表存在不一致的數(shù)據(jù)時,每隔預(yù)設(shè)時長對不一致的數(shù)據(jù)進行重復(fù)校驗,在經(jīng)過預(yù)設(shè)次數(shù)的重復(fù)校驗之后不一致的數(shù)據(jù)仍然存在時,將不一致的數(shù)據(jù)記錄在遷移報告內(nèi)。例如,對oracle數(shù)據(jù)庫的表"dbtest"."tabletest"進行數(shù)據(jù)遷移,全量遷移開始時的第一時刻之后,針對表"dbtest"."tabletest"當(dāng)前又出現(xiàn)了四次寫操作,那么增量遷移將這四次寫操作的寫入數(shù)據(jù)遷移到mysql的表`dbtest.`tabletest`時,達到所述的“已趕上(catch)”狀態(tài),也可以稱為“追平”狀態(tài)。此時,開始對增量遷移的數(shù)據(jù)進行增量校驗。增量校驗也相應(yīng)的可以通過解析日志數(shù)據(jù)的方式或者觸發(fā)器的方式來實現(xiàn)。通過解析日志數(shù)據(jù)的方式實現(xiàn)時,首先讀取第一數(shù)據(jù)庫的日志數(shù)據(jù)并解析,并通過白名單過濾出增量遷移所涉及的庫或表所對應(yīng)的數(shù)據(jù)。查詢到相應(yīng)的庫或表在第一時刻之后產(chǎn)生數(shù)據(jù)變化的列;根據(jù)庫表列的映射關(guān)系,查詢到第二數(shù)據(jù)庫對應(yīng)的庫表列;將在第一時刻之后產(chǎn)生變化的數(shù)據(jù)經(jīng)過類型轉(zhuǎn)換與第二數(shù)據(jù)庫對應(yīng)的數(shù)據(jù)進行對比,如果不一致就寫入預(yù)設(shè)列表。例如,白名單包括oracle數(shù)據(jù)庫的表"dbtest"."tabletest",從oracle數(shù)據(jù)庫重做日志中讀取針對表"dbtest"."tabletest"的數(shù)據(jù),并查詢到在第一時刻之后共有四次寫入操作,包括針對列"c_string_1"兩次,針對列"c_id"一次,針對列"c_date_1"一次。讀取表"dbtest"."tabletest"中的列"c_string_1"、"c_id"和"c_date_1"的當(dāng)前數(shù)據(jù)。根據(jù)庫表列的映射關(guān)系,查詢mysql數(shù)據(jù)庫的表`dbtest.`tabletest`中的列`c_string_1`、`c_id`和`c_date_1`的當(dāng)前數(shù)據(jù)。將列"c_string_1"、"c_id"和"c_date_1"的當(dāng)前數(shù)據(jù)經(jīng)過類型轉(zhuǎn)換后,與列`c_string_1`、`c_id`和`c_date_1`的當(dāng)前數(shù)據(jù)進行比較,將不一致的記錄在預(yù)設(shè)列表。通過觸發(fā)器的方式實現(xiàn)時,首先讀取第一數(shù)據(jù)庫增量表中的信息,根據(jù) 增量表記錄的主鍵信息反查第一數(shù)據(jù)庫中相應(yīng)的實際數(shù)據(jù),再根據(jù)白名單過濾出屬于進行了增量遷移的表的實際數(shù)據(jù),將第一數(shù)據(jù)庫中的實際數(shù)據(jù)經(jīng)過庫表列映射和類型轉(zhuǎn)換與從第二數(shù)據(jù)庫的相應(yīng)數(shù)據(jù)進行對比,如果不一致就寫入預(yù)設(shè)的數(shù)據(jù)列表。例如,增量表中包括主鍵id=1至20,反查到的數(shù)據(jù)中與白名單中的oracle數(shù)據(jù)庫的表"dbtest"."tabletest"有關(guān)的有四個,包括針對列"c_string_1"的有兩個,針對列"c_id"的有一個,針對列"c_date_1"的有一個。根據(jù)庫表列的映射關(guān)系,讀取mysql數(shù)據(jù)庫的表`dbtest.`tabletest`中的列`c_string_1`、`c_id`和`c_date_1`的當(dāng)前數(shù)據(jù)。將反查到的oracle數(shù)據(jù)庫的表"dbtest"."tabletest"的列"c_string_1"、"c_id"和"c_date_1"的數(shù)據(jù)進行類型轉(zhuǎn)換,與表`dbtest.`tabletest`中的列`c_string_1`、`c_id`和`c_date_1`的當(dāng)前數(shù)據(jù)比較,將不一致的寫入預(yù)設(shè)列表。增量校驗對于不一致的數(shù)據(jù)會進行多次的復(fù)檢。由于向第二數(shù)據(jù)庫寫入數(shù)據(jù)的過程有可能會出現(xiàn)延遲,因此增量校驗?zāi)K134對預(yù)設(shè)列表記錄的不一致的數(shù)據(jù)每隔預(yù)設(shè)時長(例如3秒)進行一次重復(fù)校驗,如果經(jīng)過預(yù)設(shè)次數(shù)(例如20次)的重復(fù)校驗不一致的數(shù)據(jù)仍然存在,則記錄在遷移報告內(nèi)。該遷移報告內(nèi)表記錄從表"dbtest"."tabletest"到表`dbtest.`tabletest`全量遷移和增量遷移已完成,但存在不一致的數(shù)據(jù),例如,對應(yīng)的列"c_date_1"與`c_date_1`。需要說明的是,本申請實施例中,所述全量遷移模塊131,所述增量遷移模塊132,所述全量校驗?zāi)K133,所述增量校驗?zāi)K134,所述結(jié)構(gòu)遷移模塊135以及所述遷移評估模塊136中,部分模塊獨立工作能夠?qū)崿F(xiàn)特定的功能,與此同時,可以根據(jù)用戶的選擇進行多個模塊之間的組合,從而形成具有不同功能的系統(tǒng)。例如,所述全量遷移模塊131作為獨立模塊時可以實現(xiàn)多線程地對多個庫多個外表進進行分布式數(shù)據(jù)遷移;所述全量遷移模塊131與所述遷移評估模塊136進行組合時,可以在進行全量遷移之前進一步對第一數(shù)據(jù)庫和第二數(shù)據(jù)庫進行評估,從而獲得源數(shù)據(jù)庫和目的數(shù)據(jù)庫的基本情況,對全量遷移實現(xiàn)一個預(yù)估;所述全量遷移模塊131還可與所述結(jié)構(gòu)遷移模塊135進行組合,當(dāng)所述第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,且數(shù)據(jù)遷 移量較大時,預(yù)先進行結(jié)構(gòu)遷移可以提高數(shù)據(jù)全量遷移的效率,節(jié)省時間。所述全量校驗?zāi)K133是依附于所述全量遷移模塊131而存在的,可以在數(shù)據(jù)進行全量遷移之后進行源庫和目的庫數(shù)據(jù)一致性的校驗。上述幾種情況是所述全量校驗?zāi)K133分別與所述結(jié)構(gòu)遷移模塊135、所述遷移評估模塊136、所述全量校驗?zāi)K133的組合功能說明,所述全量校驗?zāi)K133還可以同時與所述遷移評估模塊136、所述全量校驗?zāi)K133、所述結(jié)構(gòu)遷移模塊135中任意兩個或所有三個模塊進行組合,共得到八種可選的組合方式。這八種組合方式分別如圖1a~圖1h所示.其中,1a是全量遷移模塊131獨立存在時的架構(gòu)示意圖;圖1b是全量遷移模塊131和結(jié)構(gòu)遷移模塊135組合存在時的架構(gòu)示意圖;圖1c是全量遷移模塊131和遷移評估模塊136組合存在時的架構(gòu)示意圖;圖1d是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和遷移評估模塊136組合存在時的架構(gòu)示意圖;圖1e是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和全量校驗?zāi)K133組合存在時的架構(gòu)示意圖;圖1f是全量遷移模塊131和遷移評估模塊136和全量校驗?zāi)K133組合存在時的架構(gòu)示意圖;圖1g是全量遷移模塊131和全量校驗?zāi)K133組合存在時的架構(gòu)示意圖;圖1h是全量遷移模塊131和結(jié)構(gòu)遷移模塊和遷移評估模塊136和全量校驗?zāi)K133組合存在時的架構(gòu)示意圖;上述各模塊組合使用時,各模塊功能如圖1對應(yīng)的實施例中所述,此處不再贅述。另外,本申請實施例的所述增量遷移模塊132也是依附于所述全量遷移模塊131而存在的,增量遷移通常在全量遷移完成之后操作。結(jié)合上述全量遷移模塊131的實現(xiàn)方式,應(yīng)當(dāng)理解所述增量遷移模塊132在實現(xiàn)其位于數(shù)據(jù)遷移系統(tǒng)中的功能時,有以下幾種實現(xiàn)方式:所述增量遷移模塊132與所述全量遷移模塊131組合、所述增量遷移模塊132與所述全量遷移模塊131與所述全量校驗?zāi)K133組合、所述增量遷移模塊132與所述全量遷移模塊131與所述增校驗?zāi)K134組合、所述增量遷移模塊132與所述全量遷移模塊131與所述增校驗?zāi)K134與所述全量校驗?zāi)K133組合,其中,上述四種組合方式中,每種組合方式又可以與所述結(jié)構(gòu)遷移模塊135或所述遷移評 估模塊136中的其中一個模塊或所有兩個模塊進行組合,共得到十六種可選的組合方式。如圖1i~圖1x所示:圖1i是全量遷移模塊131和增量遷移模塊132組合存在時的架構(gòu)示意圖;圖1j是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和增量遷移模塊132組合存在時的架構(gòu)示意圖;圖1k是全量遷移模塊131和遷移評估模塊136和增量遷移模塊132組合存在時的架構(gòu)示意圖;圖1l是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和增量遷移模塊132和遷移評估模塊136組合存在時的架構(gòu)示意圖;圖1m是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和增量遷移模塊132和全量校驗?zāi)K133組合存在時的架構(gòu)示意圖;圖1n是全量遷移模塊131和遷移評估模塊136和增量遷移模塊132和全量校驗?zāi)K133組合存在時的架構(gòu)示意圖;圖1o是全量遷移模塊131和全量校驗?zāi)K133和增量遷移模塊132組合存在時的架構(gòu)示意圖;圖1p是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和遷移評估模塊136和全量校驗?zāi)K133和增量遷移模塊132組合存在時的架構(gòu)示意圖;圖1q是全量遷移模塊131和增量遷移模塊132組合存在時的架構(gòu)示意圖和增校驗?zāi)K134組合存在時的架構(gòu)示意圖;圖1r是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和增量遷移模塊132和增校驗?zāi)K134組合存在時的架構(gòu)示意圖;圖1s是全量遷移模塊131和遷移評估模塊136和增量遷移模塊132和增校驗?zāi)K134組合存在時的架構(gòu)示意圖;圖1t是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和增量遷移模塊132和遷移評估模塊136和增校驗?zāi)K134組合存在時的架構(gòu)示意圖;圖1u是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和增量遷移模塊132和全量校驗?zāi)K133和增校驗?zāi)K134組合存在時的架構(gòu)示意圖;圖1v是全量遷移模塊131和遷移評估模塊136和增量遷移模塊132和全量校驗?zāi)K133和增校驗?zāi)K134組合存在時的架構(gòu)示意圖;圖1w是全量遷移模塊131和全量校驗?zāi)K133和增量遷移模塊132和增校驗?zāi)K134組合存在時的架構(gòu)示意圖;圖1x是全量遷移模塊131和結(jié)構(gòu)遷移模塊135和遷移評估模塊136和全量校驗?zāi)K133和增量遷移模塊132和增校驗?zāi)K134組合存在時的架構(gòu)示意圖;上述各模塊組合使用時,各模塊功能如圖1對應(yīng)的實施例中所述,此處不再贅述。本申請實施例提供的數(shù)據(jù)遷移系統(tǒng),能夠提供全量遷移、增量遷移、全 量校驗、增量校驗、遷移評估和結(jié)構(gòu)遷移等類型的遷移服務(wù),并且由用戶根據(jù)需求選擇上述遷移類型。提供了一種支持同構(gòu)及異構(gòu)數(shù)據(jù)庫之間通用的數(shù)據(jù)遷移系統(tǒng),能夠在停機和非停機狀態(tài)下進行全量遷移的完整的數(shù)據(jù)遷移系統(tǒng);提供了在全量遷移之前的結(jié)構(gòu)遷移功能,當(dāng)需要遷移的數(shù)據(jù)量較大時,可以節(jié)省大量的時間和人力。提供了全量遷移之后進行的全量校驗功能,使用戶及時發(fā)現(xiàn)遷移過程中的不一致性問題。提供了在非停機狀態(tài)下的增量遷移和增量校驗功能,使新增數(shù)據(jù)得到及時同步,并且對增量進行實時校驗,及時發(fā)現(xiàn)增量數(shù)據(jù)的不一致性問題。數(shù)據(jù)遷移系統(tǒng)還具有分布式調(diào)度功能,能夠提升大數(shù)據(jù)量的數(shù)據(jù)遷移的處理效率。采用本申請?zhí)峁┑臄?shù)據(jù)遷移系統(tǒng),在源數(shù)據(jù)庫運行的業(yè)務(wù)允許停機的情況下,可以進行全量遷移;進一步的,在全量遷移之后進行全量校驗;進一步的,根據(jù)實際情況在全量遷移之前進行遷移評估和結(jié)構(gòu)遷移。以將oracle數(shù)據(jù)庫中的數(shù)據(jù)庫集合amptest1遷移到mysql數(shù)據(jù)庫的liuy_amptest1為例,過程如圖4所示,包括以下步驟。在步驟s210中,接收到創(chuàng)建的遷移任務(wù),從amptest1遷移到liuy_amptest1,遷移類型包括遷移評估、結(jié)構(gòu)遷移、全量遷移和全量校驗,其中oracle的庫amptest1處于停機狀態(tài)。在步驟s220中,對本次遷移任務(wù)進行評估,輸出評估報告。其中,所述評估報告包括amptest1的空間占用信息,庫表列和對象信息,執(zhí)行的sql以及處理性能信息,評估報告還包括liuy_amptest1的不兼容特性信息以及改造成本信息。在步驟s230中,接收到繼續(xù)執(zhí)行本次遷移任務(wù)的指令時,將amptest1中的表創(chuàng)建到liuy_amptest1,并且通過類型映射關(guān)系為每張表創(chuàng)建相應(yīng)的列。可選的,步驟s230進一步包括s231,在步驟s231中,根據(jù)預(yù)先配置的白名單確定amptest1中要遷移的表;其中,所述白名單為用戶指定的需要遷移的表的名單,如果指定了oracle數(shù)據(jù)庫中需要遷移的表,則將指定的表的名稱添加到這個白名單;如果需要將第一數(shù)據(jù)庫整體進行遷移,則這個白名單為空??蛇x的,步驟s230進一步包括s232,若是根據(jù)所述白名單確定了需要 遷移的表,則在步驟s232中,對需要遷移的表進行切分。本步驟并不限制具體的切分算法,可以是水平切分、垂直切分、散列切分算法等算法的任意一種。通過切分算法,將需要遷移的表切分成多個子任務(wù)分別異步處理,以提高全量遷移的效率。在步驟s240中,將amptest1中的全部數(shù)據(jù)遷移到liuy_amptest1中對應(yīng)的表和列??蛇x的,本實施例的數(shù)據(jù)遷移過程還包括步驟s241,在步驟s241中,每次向liuy_amptest1中寫入數(shù)據(jù)之后,記錄待遷移數(shù)據(jù)的存儲位置信息,用以斷點續(xù)傳??蛇x的,本實施例的數(shù)據(jù)遷移過程還包括步驟s242:每次向liuy_amptest1中寫入數(shù)據(jù)之后,記錄待遷移數(shù)據(jù)的位點信息,用以斷點續(xù)傳。具體的,可以在目標(biāo)服務(wù)器mysql中創(chuàng)建一個位點表increment_trx,用于記錄全量遷移的位點。若書服務(wù)器異常重啟,則位點表可以有效解決任務(wù)異常重啟后的斷點續(xù)傳問題。在步驟s250中,對amptest1與liuy_amptest1中對應(yīng)表和列數(shù)據(jù)進行比對。本步驟中所述比對的過程用以判斷由源數(shù)據(jù)庫遷移至目的數(shù)據(jù)庫的數(shù)據(jù)知否一致,若是存在不一致的數(shù)據(jù),則將不一致的數(shù)據(jù)保存在預(yù)設(shè)的列表中。其中,當(dāng)預(yù)設(shè)列表內(nèi)存在不一致的數(shù)據(jù)時,每隔預(yù)設(shè)時長對所述不一致的數(shù)據(jù)進行重復(fù)校驗,在經(jīng)過預(yù)設(shè)次數(shù)的重復(fù)校驗之后不一致的數(shù)據(jù)仍然存在時,將不一致的數(shù)據(jù)記錄在遷移評估報告內(nèi),從而能夠及時發(fā)現(xiàn)全量遷移中的數(shù)據(jù)不一致問題,實現(xiàn)了數(shù)據(jù)遷移的實時校驗,進一步保障了數(shù)據(jù)遷移的準(zhǔn)確性。具體地,根據(jù)所述預(yù)先配置的白名單確定需要進行全量校驗的表,當(dāng)將整個數(shù)據(jù)庫集合進行全量遷移時,白名單為空,則對整個數(shù)據(jù)庫集合內(nèi)的數(shù)據(jù)進行校驗。特別地,當(dāng)在第一數(shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,需要先讀取待遷移數(shù)據(jù)并轉(zhuǎn)換為預(yù)設(shè)的中間格式,通過該中間格式轉(zhuǎn)換為第二數(shù)據(jù)庫的類型,再與第二數(shù)據(jù)庫中相應(yīng)的數(shù)據(jù)進行比對。例如,本實施例中的oracle數(shù)據(jù)庫中與mysql數(shù)據(jù)庫為異構(gòu)數(shù)據(jù)庫,則需首先讀取oracle數(shù)據(jù)庫中的待遷移數(shù)據(jù)并將其轉(zhuǎn)化為預(yù)設(shè)的中間格式,再轉(zhuǎn)化為mysql數(shù)據(jù)庫的對應(yīng)的數(shù)據(jù) 類型,再與mysql數(shù)據(jù)庫中相應(yīng)的數(shù)據(jù)進行比對,從而實現(xiàn)數(shù)據(jù)全量遷移的實時校驗。結(jié)合圖5,在一種可選的實施方式中,本申請實施例的全量遷移過程進一步可由如下步驟實現(xiàn):在步驟s501中,根據(jù)預(yù)先配置的白名單確定需要遷移的表或者判斷是否對第一數(shù)據(jù)庫整體進行遷移。在步驟s502中,對需要遷移的表進行切分得到多個子任務(wù)。本步驟將大數(shù)量表切分成多個子任務(wù)進行處理,而對于每個子任務(wù),分布式調(diào)度模塊會進行相應(yīng)的調(diào)度,以實現(xiàn)負載均衡,同時提高數(shù)據(jù)遷移的效率。在步驟s503中,每個所述子任務(wù)讀取調(diào)度系統(tǒng)分配的第一庫數(shù)據(jù)進行處理。在步驟s504中,當(dāng)?shù)谝粩?shù)據(jù)庫與第二數(shù)據(jù)庫異構(gòu)時,將讀取到的第一庫數(shù)據(jù)轉(zhuǎn)化為預(yù)設(shè)的中間格式。在步驟s505中,通過預(yù)設(shè)的類型映射關(guān)系確定第一數(shù)據(jù)庫的庫表列和待遷移對象在第二數(shù)據(jù)庫中的類型。在步驟s506中,在第二數(shù)據(jù)庫創(chuàng)建與所述庫表列類型相對應(yīng)的庫表列和對象。在步驟s507中,將待遷移的數(shù)據(jù)從第一數(shù)據(jù)庫遷移至第二數(shù)據(jù)庫。在步驟s508中,每次向第二數(shù)據(jù)庫中寫入數(shù)據(jù)之后,記錄待遷移數(shù)據(jù)的位點信息,用以斷點續(xù)傳。采用本申請?zhí)峁┑臄?shù)據(jù)遷移系統(tǒng),在源數(shù)據(jù)庫運行的業(yè)務(wù)不允許停機的情況下,可以進行全量遷移和增量遷移;進一步的,在全量遷移之后進行全量校驗,在增量遷移之后進行增量校驗;進一步的,根據(jù)實際情況在全量遷移之前進行遷移評估和結(jié)構(gòu)遷移。仍然以將oracle數(shù)據(jù)庫中的數(shù)據(jù)庫集合amptest1遷移到mysql數(shù)據(jù)庫的liuy_amptest1為例,過程如圖6所示,包括以下步驟。在步驟s601中,接收到創(chuàng)建的遷移任務(wù),從amptest1遷移到liuy_amptest1,遷移類型包括遷移評估、結(jié)構(gòu)遷移、全量遷移、全量校驗、 增量遷移和增量校驗,其中oracle的庫amptest1處于非停機狀態(tài)。在步驟s602中,對本次遷移任務(wù)進行評估,輸出評估報告。在步驟s603中,接收到繼續(xù)執(zhí)行本次遷移任務(wù)的指令時,將amptest1中表創(chuàng)建到liuy_amptest1,并且通過類型映射關(guān)系為每張表創(chuàng)建相應(yīng)的列。在步驟s604中,將amptest1中的全部數(shù)據(jù)遷移到liuy_amptest1中對應(yīng)的表和列。在步驟s605中,對amptest1與liuy_amptest1中對應(yīng)表和列數(shù)據(jù)進行比對。在步驟s606中,將在全量遷移開始之后amptest1中發(fā)生變化的數(shù)據(jù)遷移到liuy_amptest1相對應(yīng)的表和列。在步驟s607中,當(dāng)增量遷移達到“已趕上”狀態(tài)時,實時的將amptest1與liuy_amptest1中進行了增量遷移的數(shù)據(jù)進行比對。在步驟s608中,針對amptest1的訪問被切換至liuy_amptest1。在步驟s609中,從切換之后首次向liuy_amptest1寫入數(shù)據(jù)的第二時刻開始,啟動反向增量遷移,將liuy_amptest1中發(fā)生變化的數(shù)據(jù)遷移到amptest1相對應(yīng)的表和列。在步驟s610中,當(dāng)從第二時刻開始的反向增量遷移達到“已趕上”狀態(tài)時,實時的將amptest1與liuy_amptest1中進行了反向增量遷移的數(shù)據(jù)進行比對。在步驟s611中,當(dāng)liuy_amptest1的出現(xiàn)異常時,將針對liuy_amptest1的訪問切換回amptest1。本實施例中,在數(shù)據(jù)庫不停機的狀態(tài)下完成全量遷移和增量遷移,并實時的對遷移后的數(shù)據(jù)進行全量校驗和增量校驗,以實時驗證數(shù)據(jù)遷移后的一致性。進行數(shù)據(jù)遷移的原因通常包括第一數(shù)據(jù)庫的存儲量過大,需要遷移部分數(shù)據(jù)至第二數(shù)據(jù)庫,或者,第一數(shù)據(jù)庫中部分數(shù)據(jù)訪問量過多,影響了其他數(shù)據(jù)的正常訪問,需要將訪問量過多的數(shù)據(jù)遷移到第二數(shù)據(jù)庫。因此,驗證出遷移后的數(shù)據(jù)完全一致時,便可以將客戶端針對待遷移數(shù)據(jù)的訪問從第一數(shù)據(jù)庫切換到第二數(shù)據(jù)庫。而在切換之后,由于應(yīng)用程序在運行中出現(xiàn)程序錯誤(bug)或者第二數(shù)據(jù)庫處理能力出現(xiàn)問題,有可能會出現(xiàn)需要將訪問再切換回第一數(shù)據(jù)庫的情形。為了使待遷移數(shù)據(jù)在兩個數(shù)據(jù)庫中能夠?qū)崟r的保持一致。因此,待遷移數(shù)據(jù)在第二數(shù)據(jù)庫的變化也要實時的以反向增量遷移方式回流到第一數(shù)據(jù)庫,并以增量校驗的方式對回流的數(shù)據(jù)進行實時校驗,上述數(shù)據(jù)遷移還可以進一步包括以下步驟。例如,寫操作被切換到liuy_amptest1之后,首次寫操作修改了表“a00_full_type_table_m1b1”內(nèi)的列“id_type”的數(shù)據(jù),則該寫操作的時刻即為第二時刻。此時開始從liuy_amptest1向amptest1的反向增量遷移。在第二時刻之后的25秒,共四次修改了表“a00_full_type_table_m1b1”內(nèi)的數(shù)據(jù),當(dāng)這四次被修改的數(shù)據(jù)全部被遷移到amptest1時,開始實施的針對上述反向增量遷移的增量校驗,以驗證當(dāng)前amptest1和liuy_amptest1的數(shù)據(jù)是否保持一致。當(dāng)liuy_amptest1出現(xiàn)異常時,由于已進行了反向增量遷移,可以實時的將寫操作等訪問再切換回amptest1。本實施例提供的不停機的數(shù)據(jù)遷移方法,在兩個數(shù)據(jù)庫之間進行實時的增量遷移和增量校驗,使兩個數(shù)據(jù)庫保持一致,針對對應(yīng)數(shù)據(jù)的訪問可以在兩個數(shù)據(jù)庫之間實時切換。具體地,結(jié)合圖7a和7b,在一種可選的實施方式中,本申請實施例中,基于日志方式的增量遷移過程進一步可由如下步驟實現(xiàn):在步驟s701中:讀取并解析第一數(shù)據(jù)庫的日志獲得增量數(shù)據(jù)。通常,增量遷移會預(yù)先創(chuàng)建增量任務(wù)的解析路徑,例如,本發(fā)明實施例可以使用topicstore來標(biāo)識一個數(shù)據(jù)解析通道。第一數(shù)據(jù)庫即源庫的日志記錄的是增量數(shù)據(jù),通過解析第一數(shù)據(jù)庫的日志即可獲得源庫數(shù)據(jù)增加的數(shù)據(jù)。在步驟s702中:通過白名單確定增量數(shù)據(jù)中需要遷移的表。增量前移在全量遷移結(jié)束后進行,當(dāng)從topicstore獲取到增量數(shù)據(jù)后,先通過白名單對增量數(shù)據(jù)進行過濾,從而得到待遷移的表。其中,所述白名 單與全量遷移時預(yù)先配置的白名單相同,由客戶端指定。在步驟s703中:將待遷移的數(shù)據(jù)轉(zhuǎn)換成預(yù)設(shè)的中間格式并寫入隊列queue。在步驟s704中,從隊列queue中多線程地讀取中間格式的數(shù)據(jù)讀取數(shù)據(jù)并進行庫列表的映射。在步驟s705中,將待遷移的數(shù)據(jù)寫入第二數(shù)據(jù)庫,并記錄待遷移數(shù)據(jù)的位點信息,用以斷點續(xù)傳。進一步地,數(shù)據(jù)表的主鍵值有更新(update)或刪除操作時(delete),在步驟s706中,根據(jù)第一數(shù)據(jù)庫的更新結(jié)果,將數(shù)據(jù)寫入過程進一步拆分為寫入和刪除。例如,當(dāng)?shù)谝粩?shù)據(jù)庫中的某一數(shù)據(jù)表的主鍵值由1變至2,則相應(yīng)的,第二數(shù)據(jù)庫中,與第一數(shù)據(jù)庫主鍵值為1的數(shù)據(jù)表存在映射關(guān)系的表相應(yīng)的進行刪除操作(delete),與此同時,相應(yīng)地第二數(shù)據(jù)庫中與第一數(shù)據(jù)庫主鍵值為2的數(shù)據(jù)表存在映射關(guān)系的表進行數(shù)據(jù)的寫入操作。當(dāng)然,上述說明僅供舉例,并不對本申請實施例構(gòu)成限制。結(jié)合圖8,在一種可選的實施方式中,本申請實施例中,基于觸發(fā)器方式的增量遷移過程進一步可由如下步驟實現(xiàn):在步驟s801中,首先創(chuàng)建增量表和觸發(fā)器(trigger)。在步驟s802中,讀取第一數(shù)據(jù)庫增量表中的信息,根據(jù)增量表記錄的主鍵信息反查第一數(shù)據(jù)庫中相應(yīng)的原始數(shù)據(jù)。在步驟s803中,根據(jù)白名單過濾出增量遷移的表的實際數(shù)據(jù)。在步驟s804中,將待遷移的數(shù)據(jù)轉(zhuǎn)換成預(yù)設(shè)的中間格式并進行庫列表的映射。在步驟s805中,將待遷移的數(shù)據(jù)寫入第二數(shù)據(jù)庫,并記錄已經(jīng)處理到的增量的位點信息,用以斷點續(xù)傳。其中,需要說明的是,增量表中保存的只是主鍵信息而非原始數(shù)據(jù),因此將待遷移的數(shù)據(jù)寫入第二數(shù)據(jù)庫之前,需根據(jù)獲取的增量表中的信息反查源庫,即第一數(shù)據(jù)庫,從而獲取待遷移的原始數(shù)據(jù),并將所述原始數(shù)據(jù)寫入 第二數(shù)據(jù)庫。進一步地,若第一數(shù)據(jù)庫中,數(shù)據(jù)表的主鍵值有更新(update)或刪除操作時(delete),在步驟s806中,根據(jù)第一數(shù)據(jù)庫的更新結(jié)果,將數(shù)據(jù)寫入過程進一步拆分為寫入和刪除。采用本申請?zhí)峁┑臄?shù)據(jù)遷移系統(tǒng),在增量遷移之后進行全量校驗,具體地,全量校驗的實現(xiàn)過程如圖9所示,包括如下步驟:在步驟s901中,讀取第一數(shù)據(jù)庫的表信息,并根據(jù)預(yù)先配置的白名單得到需校驗的表信息;在步驟s902中,讀取第一數(shù)據(jù)庫中的數(shù)據(jù),并將讀取到的數(shù)據(jù)轉(zhuǎn)化為預(yù)設(shè)的中間格式并進行庫表映射;在步驟s903中,根據(jù)所述庫表映射,在第二數(shù)據(jù)庫中查詢由第一數(shù)據(jù)庫遷移而來的數(shù)據(jù);其中,需要說明的是,步驟s902和步驟s903是并行的步驟,本申請實施例并不對其順序進行限制。在步驟s904中,將步驟s902和步驟s903中得到的數(shù)據(jù)根據(jù)庫表映射關(guān)系進行對比,若結(jié)果一致,則執(zhí)行步驟s905,否則執(zhí)行步驟s906。在步驟s905中,結(jié)束校驗過程。在步驟s906中,將不一致的數(shù)據(jù)保存在預(yù)設(shè)列表。當(dāng)預(yù)設(shè)列表內(nèi)存在不一致的數(shù)據(jù)時,每隔預(yù)設(shè)時長對不一致的數(shù)據(jù)進行重復(fù)校驗,在經(jīng)過預(yù)設(shè)次數(shù)的重復(fù)校驗之后不一致的數(shù)據(jù)仍然存在時,將不一致的數(shù)據(jù)記錄在遷移評估報告內(nèi)。采用本申請?zhí)峁┑臄?shù)據(jù)遷移系統(tǒng),在增量遷移之后進行增量校驗。其中,基于日志的增量校驗的實現(xiàn)過程如圖10所示,包括如下步驟:在步驟s1001中,讀取第一數(shù)據(jù)庫的日志并對所述日志的內(nèi)容進行解析;在步驟s1002中,根據(jù)所述解析的結(jié)果對第一數(shù)據(jù)庫進行查詢,得到第一數(shù)據(jù)中待遷移的增量數(shù)據(jù)。在步驟s1003中,對第一數(shù)據(jù)庫中查詢到的增量數(shù)據(jù)進行白名單的過濾 獲得增遷移所涉及的庫表以及數(shù)據(jù)并轉(zhuǎn)化為預(yù)設(shè)的中間格式。在步驟s1004中,進行庫表映射并根據(jù)所述庫表映射的結(jié)果查詢第二數(shù)據(jù)庫中增遷移所涉及的庫表以及數(shù)據(jù)。在步驟s1005中,根據(jù)庫表映射關(guān)系,將步驟s1003和步驟s1004中獲取到的增量前移所涉及到的庫表或數(shù)據(jù)進行對比,若一致,則執(zhí)行步驟s1006,若為否,則執(zhí)行步驟s1007。在步驟s1006中,保存增量校驗的位點信息。在步驟s1007中,將不一致的數(shù)據(jù)保存在預(yù)設(shè)列表,并跳轉(zhuǎn)至步驟s1006。具體的,本申請實施例中,基于觸發(fā)器的增量校驗實現(xiàn)過程如圖11所示,包括如下步驟:在步驟s1101中,讀取第一數(shù)據(jù)庫的增量表;在步驟s1102中,根據(jù)所述增量表對第一數(shù)據(jù)庫進行查詢,得到第一數(shù)據(jù)中增遷移所涉及的庫表以及數(shù)據(jù)。在步驟s1103中,對第一數(shù)據(jù)庫中查詢到的增量數(shù)據(jù)進行白名單的過濾、并轉(zhuǎn)化為預(yù)設(shè)的中間格式。在步驟s1104中,進行庫表映射并根據(jù)所述庫表映射的結(jié)果查詢第二數(shù)據(jù)庫中增遷移所涉及的庫表以及數(shù)據(jù)。在步驟s1105中,根據(jù)庫表映射關(guān)系,將步驟s1103和步驟s1104中獲取到的數(shù)據(jù)進行對比,若一致,則執(zhí)行步驟s1106,若為否,則執(zhí)行步驟s1107。在步驟s1106中,保存增量校驗的位點信息。在步驟s1107中,將不一致的數(shù)據(jù)保存在預(yù)設(shè)列表,并跳轉(zhuǎn)至步驟s1106。本實施例中,通過全量校驗和增量校驗,可以及時發(fā)現(xiàn)數(shù)據(jù)遷移過程中出現(xiàn)的數(shù)據(jù)不一致的問題,尤其對于核心應(yīng)用的數(shù)據(jù),保證了其遷移數(shù)據(jù)的完整性及安全性。在一個典型的配置中,計算設(shè)備包括一個或多個處理器(cpu)、輸入/ 輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。內(nèi)存是計算機可讀介質(zhì)的示例。計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機存取存儲器(sram)、動態(tài)隨機存取存儲器(dram)、其他類型的隨機存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括非暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。如在說明書及權(quán)利要求當(dāng)中使用了某些詞匯來指稱特定組件。本領(lǐng)域技術(shù)人員應(yīng)可理解,硬件制造商可能會用不同名詞來稱呼同一個組件。本說明書及權(quán)利要求并不以名稱的差異來作為區(qū)分組件的方式,而是以組件在功能上的差異來作為區(qū)分的準(zhǔn)則。如在通篇說明書及權(quán)利要求當(dāng)中所提及的“包含”為一開放式用語,故應(yīng)解釋成“包含但不限定于”?!按笾隆笔侵冈诳山邮盏恼`差范圍內(nèi),本領(lǐng)域技術(shù)人員能夠在一定誤差范圍內(nèi)解決所述技術(shù)問題,基本達到所述技術(shù)效果。此外,“耦接”一詞在此包含任何直接及間接的電性耦接手段。因此,若文中描述一第一裝置耦接于一第二裝置,則代表所述第一裝置可直接電性耦接于所述第二裝置,或通過其他裝置或耦接手段間接地電性耦接至所述第二裝置。說明書后續(xù)描述為實施本申請的較佳實施方式,然所述描述乃以說明本申請的一般原則為目的,并非用以限定本申請的范圍。本申請的保護范圍當(dāng)視所附權(quán)利要求所界定者為準(zhǔn)。還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的商品或者系統(tǒng)不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種商品或者系 統(tǒng)所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的商品或者系統(tǒng)中還存在另外的相同要素。上述說明示出并描述了本申請的若干優(yōu)選實施例,但如前所述,應(yīng)當(dāng)理解本申請并非局限于本文所披露的形式,不應(yīng)看作是對其他實施例的排除,而可用于各種其他組合、修改和環(huán)境,并能夠在本文所述發(fā)明構(gòu)想范圍內(nèi),通過上述教導(dǎo)或相關(guān)領(lǐng)域的技術(shù)或知識進行改動。而本領(lǐng)域人員所進行的改動和變化不脫離本申請的精神和范圍,則都應(yīng)在本申請所附權(quán)利要求的保護范圍內(nèi)。當(dāng)前第1頁12當(dāng)前第1頁12