數據遷移
出自 MBA智库百科(https://wiki.mbalib.com/)
數據遷移(Data Migration)
目錄 |
什麼是數據遷移[1]
數據遷移是數據系統整合中保證系統平滑升級和更新的關鍵部分。在信息化建設過程中,隨著技術的發展,原有的信息系統不斷被功能更強大的新系統所取代。從兩層結構到三層結構,從Client/Server到Browser/Server。在新舊系統的切換過程中,必然要面臨一個數據遷移的問題。
數據遷移的特點[1]
系統切換時的數據遷移不同於從生產系統OLTP(On-line Transaction Processing)到數據倉庫(Data Warehouse,DW)的數據抽取。後者主要將生產系統在上次抽取後所發生的數據變化同步到數據倉庫,這種同步在每個抽取周期都進行,一般以天為單位。而數據遷移是將需要的歷史數據一次或幾次轉換到新的生產系統,其最主要的特點是需要在短時間內完成大批量數據的抽取、清洗和裝載。
數據遷移的內容是整個數據遷移的基礎,需要從信息系統規劃的角度統一考慮。劃分內容時,可以從橫向的時間和縱向的模塊2個角度去考慮。
1.橫向劃分
以產生數據的時間為劃分依據,需要考慮比較久遠的歷史數據如何遷移的問題。由於信息技術的發展,以及存儲工程師對電腦依賴性的增強,每天新系統往往需要比舊系統存儲更多的信息,同時為瞭解決高增長的數據量帶來的性能瓶頸,新系統一般只保留一定時期的數據(如1年),而把超過保存周期的數據,即1年以前的數據轉移到數據倉庫中,以便用於決策分析。對於這種新系統的數據遷移,主要遷移1年以內的數據,1年以前的歷史數據需要另外考慮。
2.縱向劃分
以處理數據的功能模塊為劃分依據,需要考慮在新系統中沒有被包含的功能模塊,其所涉及數據的處理問題。這類數據由於無法建立映射關係,一般不需要遷移到新系統中。但對於模塊間耦合度比較緊密的舊系統,在縱向劃分時需要註意數據的完整性。
數據遷移的方法和策略[2]
數據遷移可以採取不同的方法進行,歸納起來主要有3種方法:系統切換前通過工具遷移、系統切換前採用手工錄入以及系統切換後通過新系統生成。
1.系統切換前通過工具遷移
在系統切換前,利用ETL(Extract Transform Load,抽取、轉換和裝載)工具把舊系統中的歷史數據抽取、轉換,並裝載到新系統中去。其中ETL工具可以購買成熟的產品,也可以是自主開發的程式。這種方法是數據遷移最主要,也是最快捷的方法。其實施的前提是:歷史數據可用並且能夠映射到新系統中。
2.系統切換前採用手工錄入
在系統切換前,組織相關人員把需要的數據手工錄入到新系統中。這種方法消耗的人力、物力比較大,同時出錯率也比較高。主要是一些無法轉換到新系統中的數據和新系統啟用時必需的、而舊系統無法提供的數據採用這種方法,作為第1種方法的有益補充。
3.系統切換後通過新系統生成
在系統切換後,通過新系統的相關功能,或為此專門開發的配套程式生成所需要的數據。通常根據已經遷移到新系統中的數據來生成所需的信息。其實施的前提是,這些數據能夠通過其他數據產生。
數據遷移的策略是指採用什麼方式進行數據的遷移。結合不同的遷移方法,主要有一次遷移、分次遷移、先錄後遷、先遷後補等幾種方式可供選擇。
1.一次遷移
一次遷移是通過數據遷移工具或遷移程式,將需要的歷史數據一次性全部遷移到新系統中。一次遷移的優點是遷移實施的過程短,相對分次遷移,遷移時涉及的問題少,風險相對比較低。其缺點是工作強度比較大,由於實施遷移的人員需要一直監控遷移的過程,如果遷移所需的時間比較長,工作人員會很疲勞。一次遷移的前提是新舊系統資料庫差異不大,在允許的宕機時間內可以完成所有數據量的遷移。
2.分次遷移
分次遷移是通過數據遷移工具或遷移程式,將需要的歷史數據分幾次遷移到新系統中。分次遷移可以將任務分開,有效地解決數據量大和宕機時間短之間的矛盾。但是分次切換導致數據多次合併,增加了出錯的概率,同時為了保持整體數據的一致性,分次遷移時需要對先遷移的數據進行同步,增加了遷移的複雜度。分次遷移一般在系統切換前先遷移靜態數據和變化不頻繁的數據,例如代碼、用戶信息等;然後在系統切換時遷移動態數據,例如交易信息。對於靜態數據遷移之後發生的數據變更,可以每天同步到新系統中,也可以在系統切換時通過增量的方式一次同步到新系統中。
3.先錄後遷
先錄後遷是在系統切換前,先通過手工把一些數據錄入到新系統中,系統切換時再遷移其他的歷史數據。先錄後遷主要針對新舊系統數據結構存在特定差異的情況,即對於新系統啟用時必需的初始數據,無法從現有的歷史數據中得到。對於這部分初始數據,就可以在系統切換前通過手工錄入。
4.先遷後補
先遷後補是指在系統切換前通過數據遷移工具或遷移程式,將原始數據遷移到新系統中,然後通過新系統的相關功能,或為此專門編寫的配套程式,根據已經遷移到新系統中的原始數據,生成所需要的結果數據。先遷後補可以減少遷移的數據量。
數據遷移的實現[2]
數據遷移的實現可以分為3個階段:數據遷移前的準備、數據遷移的實施和數據遷移後的校驗。由於數據遷移的特點,大量的工作都需要在準備階段完成,充分而周到的準備工作是完成數據遷移的主要基礎。具體而言,要進行待遷移數據源的詳細說明(包括數據的存儲方式、數據量、數據的時間跨度);建立新舊系統資料庫的數據字典;對舊系統的歷史數據進行質量分析,新舊系統數據結構的差異分析;新舊系統代碼數據的差異分析;建立新老系統資料庫表的映射關係,對無法映射欄位的處理方法;開發、部屬ETL工具,編寫數據轉換的測試計劃和校驗程式;制定數據轉換的應急措施。
其中,數據遷移的實施是實現數據遷移的3個階段中最重要的環節。它要求制定數據轉換的詳細實施步驟流程;準備數據遷移環境;業務上的準備,結束未處理完的業務事項,或將其告一段落;對數據遷移涉及的技術都得到測試;最後實施數據遷移。
數據遷移後的校驗是對遷移工作的檢查,數據校驗的結果是判斷新系統能否正式啟用的重要依據。可以通過質量檢查工具或編寫檢查程式進行數據校驗,通過試運行新系統的功能模塊,特別是查詢、報表功能,檢查數據的準確性。
數據轉換與遷移通常包括多項工作:舊系統數據字典整理、舊系統數據質量分析、新系統數據字典整理、新舊系統數據差異分析、建立新舊系統數據之問的映射關係、開發部署數據轉換與遷移程式、制定數據轉換與遷移過程中的應急方案、實施舊系統數據到新系統的轉換與遷移工作、檢查轉換與遷移後數據的完整性與正確性。
數據轉換與遷移的過程大致可以分為抽取、轉換、裝載三個步驟。數據抽取、轉換是根據新舊系統資料庫的映射關係進行的,而數據差異分析是建立映射關係的前提,這其中還包括對代碼數據的差異分析。轉換步驟一般還要包含數據清洗的過程,數據清洗主要是針對源資料庫中,對出現二義性、重覆、不完整、違反業務或邏輯規則等問題的數據進行相應的清洗操作;在清洗之前需要進行數據質量分析,以找出存在問題的數據,否則數據清洗將無從談起。數據裝載是通過裝載工具或自行編寫的SQL程式將抽取、轉換後的結果數據載入到目標資料庫中。
對數據的檢查包括以下6個方面。
(1)數據格式檢查。檢查數據的格式是否一致和可用,目標數據要求為number型。
(2)數據長度檢查。檢查數據的有效長度,對於char類型的欄位轉換到varchar類型中,需要特別關註。
(3)區間範圍檢查。檢查數據是否包含在定義的最大值和最小值的區間中。例如年齡為300或錄入日期為4000—1—1顯然有問題。
(4)空值、預設值檢查。檢查新舊系統定義的空值、預設值是否相同,不同資料庫系統對空值的定義可能不同,需要特別關註。
(5)完整性檢查。檢查數據的關聯完整性。如記錄引用的代碼值是否存在,特別需要註意的是有些系統在使用一段時間後,為了提高效率而去掉了外鍵約束。
(6)一致性檢查。檢查邏輯上是否存在違反一致性的數據,特別是存在分別提交操作的系統。
數據遷移工具的開發、部署主要有2種選擇,即自主開發程式或購買成熟的產品。這2種選擇都有各自不同的特點,選擇時還要根據具體情況進行分析。縱觀目前國內一些大型項目,在數據遷移時多是採用相對成熟的ETL產品。可以看到這些項目有一些共同特點,主要包括:遷移時有大量的歷史數據、允許的宕機時間很短、面對大量的客戶或用戶、存在第三方系統接入、一旦失敗所產生的影響面將很廣。同時也應該看到,自主開發程式也被廣泛地採用。
目前,許多資料庫廠商都提供數據抽取工具,如Informix的InfoMover、Microsoft SQLServer的DTS和0raele的Oracle Warehouse Builder等。這些工具在一定範圍內解決了數據的提取和轉換。但這些工具基本都不能自動完成數據的抽取,用戶還需利用這些工具編寫適當的轉換程式。
例如Oracle的Oracle Warehouse Builder(OWB)數據抽取工具提供的功能包括:模型構造和設計,數據提取、移動和裝載,元數據管理等。但OWB提供的流程繁瑣,維護很困難,不易於使用。
在第三方產品中,Ascential Software公司的DataStage是一套相對比較完善的產品。DataStage可以從多個不同的業務系統、從多個平臺的數據源中抽取數據,完成轉換和清洗,裝載到各種系統裡面,其中每步都可以在圖形化工具里完成;同樣可以靈活地被外部系統調度,提供專門的設計工具來設計轉換規則和清洗規則等,實現了增量抽取、任務調度等多種複雜而實用的功能。其中簡單的數據轉換可以通過在界面上拖拉操作和調用一些DataStage預定義轉換函數來實現,複雜轉換可以通過編寫腳本或結合其他語言的擴展來實現,並且DataStage提供調試環境,可以極大地提高開發和調試抽取、轉換程式的效率。
數據抽取前,需要作大量的準備工作,具體歸納為如下4個部分。
(1)針對目標資料庫中的每張數據表,根據映射關係中記錄的轉換加工描述,建立抽取函數。該映射關係為前期數據差異分析的結果。抽取函數的命名規則為:F_目標數據表名_E。
(2)根據抽取函數的SQL語句進行優化。可以採用的優化方式為:調整SORTAREA_SIZE和HASH_AREA_SIZE等參數設置、啟動並行查詢、採用提示指定優化器、創建臨時表、對源數據表作ANALYZES、增加索引。
(3)建立調度控製表,包括ETL函數定義表(記錄抽取函數、轉換函數、清洗函數和裝載函數的名稱和參數)、抽取調度表(記錄待調度的抽取函數)、裝載調度表(記錄待調度的裝載信息)、抽取日誌表(記錄各個抽取函數調度的起始時間和結束時間以及抽取的正確或錯誤信息)、裝載日誌表(記錄各個裝載過程調度的起始時間和結束時間以及裝載過程執行的正確或錯誤信息)。
(4)建立調度控製程序,根據抽取調度表動態調度抽取函數,並將抽取的數據保存入平面文件。平面文件的命名規則為:目標數據表名.txt。
數據轉換的工作在ETL過程中主要體現為對源數據的清洗和代碼數據的轉換。數據清洗主要用於清洗源數據中的垃圾數據,可以分為抽取前清洗、抽取中清洗和抽取後清洗。ETL對源數據主要採用抽取前清洗。對代碼表的轉換可以考慮在抽取前轉換和在抽取過程中進行轉換,具體如下。
(1)針對ETL涉及的源資料庫中數據表,根據數據質量分析的結果,建立數據抽取前的清洗函數。該清洗函數可由調度控製程序在數據抽取前進行統一調度,也可分散到各個抽取函數中調度。清洗函數的命名規則為:F_源數據表名_T_C。
(2)針對ETL涉及的源資料庫中數據表,根據代碼數據差異分析的結果,如果需要轉換的代碼數據值長度無變化或變化不大,考慮對源數據表中引用的代碼在抽取前進行轉換。抽取前轉換需要建立代碼轉換函數,代碼轉換函數由調度控製程序在數據抽取前進行統一調度。代碼轉換函數的命名規則為:F_源數據表名_T_DM。
(3)對新舊代碼編碼規則差異較大的代碼,考慮在抽取過程中進行轉換。根據代碼數據差異分析的結果,調整所有涉及該代碼數據的抽取函數。
在數據遷移完成後,需要對遷移後的數據進行校驗。數據遷移後的校驗是對遷移質量的檢查,同時數據校驗的結果也是判斷新系統能否正式啟用的重要依據。
可以通過以下2種方式對遷移後的數據進行校驗:新舊系統查詢數據對比檢查,通過新舊系統各自的查詢工具,對相同指標的數據進行查詢,並比較最終的查詢結果;先將新系統的數據恢復到舊系統遷移前一天的狀態,然後將最後一天發生在舊系統上的業務全部補錄到新系統,檢查有無異常,並和舊系統比較最終產生的結果。
對遷移後的數據進行質量分析,可以通過數據質量檢查工具或編寫有針對性的檢查程式進行。對遷移後數據的校驗有別於遷移前歷史數據的質量分析,主要是檢查指標的不同。遷移後數據校驗的指標主要包括5方面:完整性檢查,引用的外鍵是否存在;一致性檢查,相同含義的數據在不同位置的值是否一致;總分平衡檢查,例如欠稅指標的總和與分部門、分戶不同數據的合計對比;記錄條數檢查,檢查新舊資料庫對應的記錄條數是否一致;特殊樣本數據的檢查,檢查同一樣本在新舊資料庫中是否一致。