數據遷移

離線存儲與在線存儲融合的技術

數據遷移(又稱分級存儲管理,hierarchical storage management,hsm)是一種將離線存儲與在線存儲融合的技術。它將高速、高容量的非在線存儲設備作為磁碟設備的下一級設備,然後將磁碟中常用的數據按指定的策略自動遷移到磁帶庫(簡稱帶庫)等二級大容量存儲設備上。當需要使用這些數據時,分級存儲系統會自動將這些數據從下一級存儲設備調回到上一級磁碟上。對於用戶來說,上述數據遷移操作完全是透明的,只是在訪問磁碟的速度上略有怠慢,而在邏輯磁碟的容量上明顯感覺大大提高了。

數據遷移是將很少使用或不用的文件移到輔助存儲系統(如磁帶或光碟)的存檔過程。這些文件通常是需要在未來任何時間可進行方便訪問的圖像文檔或歷史信息。遷移工作與備份策略相結合,並且仍要求定期備份。還包括電腦數據遷移,遷移舊電腦(舊系統)中的數據、應用程序、個性化設置等到新電腦(新系統),在系統升級后很有必要。

方法


數據遷移可以採取不同的方法進行,歸納起來主要有三種方法,即系統切換前通過工具遷移、系統切換前採用手工錄入、系統切換后通過新系統生成。
遷移(和回遷)是將文件從珍貴的高速磁碟空間移出並移到輔助高容量主媒體光碟的過程。文件在離線時仍可用,但用戶需通過網路訪問它們。
該過程是通過將存檔文件的名稱列表保留在主媒體上實現的。當用戶需要存檔的文件時,他們在該目錄中查找該文件,找到后像普通的文件一樣打開它。隨機文件從輔助存儲器(光碟)上回遷到主存儲器(磁碟)上。整個過程在後台發生,用戶可能不知道文件已經從光碟中回遷出來。當用戶處理完Q時,文件又遷回至輔助存儲器中。遷移過程在某個特定的時間段后或按用戶或網路管理員的意願立即發生。
Novell NetWare高容量存儲系統(HCSS)是支持離線光碟自動換盤機存儲設備的數據存檔系統。光碟自動換盤機是可以從可重寫光碟庫中選盤的自動換盤設備。HCSS使用數據遷移技術在高速、低容量存儲設備(伺服器的硬碟)和低速、大容量存儲設備(光碟庫)之間移動文件。用戶在一個特殊的目錄中仍能採用文件的清單,這些文件看起來就像被聯機存儲一樣。
HCSS系統將管理員作上標記的文件“遷移”到離線光碟庫存儲設備中。如果用戶需要已遷移的文件,他只需按普通方法對其進行訪問。HCSS系統反向遷移文件到磁碟,用戶就能對其訪問。除了很短的訪問延遲,用戶將不會意識到訪問的是歸檔文件。一段時間后,文件又重新遷移回光碟。

技術準備


數據轉換與遷移通常包括多項工作:舊系統數據字典整理、舊系統數據質量分析、新系統數據字典整理、新舊系統數據差異分析、建立新舊系統數據之問的映射關係、開發部署數據轉換與遷移程序、制定數據轉換與遷移過程中的應急方案、實施舊系統數據到新系統的轉換與遷移工作、檢查轉換與遷移后數據的完整性與正確性。
數據轉換與遷移的過程大致可以分為抽取、轉換、裝載三個步驟。數據抽取、轉換是根據新舊系統資料庫的映射關係進行的,而數據差異分析是建立映射關係的前提,這其中還包括對代碼數據的差異分析。轉換步驟一般還要包含數據清洗的過程,數據清洗主要是針對源資料庫中,對出現二義性、重複、不完整、違反業務或邏輯規則等問題的數據進行相應的清洗操作;在清洗之前需要進行數據質量分析,以找出存在問題的數據,否則數據清洗將無從談起。數據裝載是通過裝載工具或自行編寫的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方面:完整性檢查,引用的外鍵是否存在;一致性檢查,相同含義的數據在不同位置的值是否一致;總分平衡檢查,例如欠稅指標的總和與分部門、分戶不同數據的合計對比;記錄條數檢查,檢查新舊資料庫對應的記錄條數是否一致;特殊樣本數據的檢查,檢查同一樣本在新舊資料庫中是否一致。

特點


直接映射
原來是什麼就是什麼,原封不動照搬過來,對這樣的規則,如果數據源欄位和目標欄位長度或精度不符,需要特別注意看是否真的可以直接映射還是需要做一些簡單運算。
欄位運算
數據源的一個或多個欄位進行數學運算得到的目標欄位,這種規則一般對數值型欄位而言。
參照轉換
在轉換中通常要用數據源的一個或多個欄位作為Key,去一個關聯數組中去搜索特定值,而且應該只能得到唯一值。這個關聯數組使用Hash演演算法實現是比較合適也是最常見的,在整個ETL開始之前,它就裝入內存,對性能提高的幫助非常大。
字元串處理
從數據源某個字元串欄位中經常可以獲取特定信息,例如身份證號。而且,經常會有數值型值以字元串形式體現。對字元串的操作通常有類型轉換、字元串截取等。但是由於字元類型欄位的隨意性也造成了臟數據的隱患,所以在處理這種規則的時候,一定要加上異常處理。
空值判斷
對於空值的處理是數據倉庫中一個常見問題,是將它作為臟數據還是作為特定一種維成員?這恐怕還要看應用的情況,也是需要進一步探求的。但是無論怎樣,對於可能有NULL值的欄位,不要採用“直接映射”的規則類型,必須對空值進行判斷,我們的建議是將它轉換成特定的值。
日期轉換
在數據倉庫中日期值一般都會有特定的,不同於日期類型值的表示方法,例如使用8位整型20040801表示日期。而在數據源中,這種欄位基本都是日期類型的,所以對於這樣的規則,需要一些共通函數來處理將日期轉換為8位日期值、6位月份值等。
日期運算
基於日期,我們通常會計算日差、月差、時長等。一般資料庫提供的日期運算函數都是基於日期型的,而在數據倉庫中採用特定類型來表示日期的話,必須有一套自己的日期運算函數集。
聚集運算
對於事實表中的度量欄位,他們通常是通過數據源一個或多個欄位運用聚集函數得來的,這些聚集函數為SQL標準中,包括sum,count,avg,min,max。
既定取值
這種規則和以上各種類型規則的差別就在於它不依賴於數據源欄位,對目標欄位取一個固定的或是依賴系統的值。
通俗地講,數據遷移 是一種可以把大量不經常訪問的數據存放在帶庫、盤庫等離線介質上,只在盤陣上保存少量訪問頻率高的數據的技術。當那些磁帶等介質上的數據被訪問時,系統自動清除得把這些數據回遷到盤陣中;同樣,盤陣中很久未訪問的數據被自動遷移到磁帶介質上,從而大大降低投入和管理成本。