數據遷移

背景

數據遷移工作是系統上線前一個非常重要的工作,也是系統上線后穩定性的一個重要基礎。

軟件系統一般在使用數年后都會升級換代。其中數據是系統最重要的部分,如何把重要的業務數據從原有的系統遷移到新系統,保證新老系統切換時對外服務的連續性,同時保證老系統運行期間積累的大量珍貴歷史數據得以保留,降低對終端用戶的影響,是新系統上線的重要步驟。

眾齊軟件從事供熱信息化十幾年,截止目前做的大部分數據遷移都是收費系統數據。對供熱企業而言,收費數據和資金息息相關,涉及到錢就不是小事,數據遷移好了,應收、實收都弄對了,對企業至關重要。

數據遷移可以說是一項非常精細化的工作,需要我們能夠分析出老系統的數據結構及各個字段的含義,通過與客戶進行業務上的溝通以及老系統的數據結構的比對分析,來梳理清楚老系統的數據結構。眾齊軟件的實施顧問會結合新的供熱收費系統,弄明白怎么把這些舊有數據映射到新的數據庫,使其符合新系統的業務邏輯。

遷移案例

眾齊軟件已經完成了上百家供熱企業的數據遷移工作,幫助他們實現了供熱數據和業務的延續性。由于市場早期占有率的原因,眾齊軟件對國內主流的收費軟件廠商的數據庫更是擁有豐富的數據遷移經驗。

遷移要求

數據遷移是一項重要、工作量大、嚴謹度高的工作。對于參與數據遷移工作的人有如下要求:

業務

老系統在漫長的生命周期中經過了多次變更,不同階段的歷史數據與不同時期的代碼邏輯和業務數據模型不配套,有時還會包含異常數據,這些在老系統內“無害”的數據,卻有可能引起新系統的“過敏”反應。數據遷移不是單純的數據“搬運”,而是按照全新的“圖紙”進行數據“重構”。不僅要對老系統中的業務數據進行清洗,剔除異常數據,而且要完成新老系統數據的映射關系和新業務要素的生成規則,并最終用技術手段予以實現。在業務上我們需要盡可能的了解客戶以前的業務需求,明白客戶舊的系統和我們的業務系統有什么差異。這些差異是我們重點需要注意的地方。對客戶業務了解的越是詳盡,遷移的時候出問題的概率就越低。

技術

本地環境要有mysql,oracle,sqlserver三個數據庫還要有對應的數據庫工具,并且會使用這些工具。能夠熟練地進行較為復雜sql的編寫。

素質

數據遷移過程中需要做很多的業務溝通和數據核對溝通,需要有較好的溝通理解能力。我們在數據遷移的時候面對的不僅僅是怎么遷移能保證數據遷移正確,符合系統業務邏輯,保證系統正常運行的問題,更多時候還有客戶數據本身就是錯誤的情況。數據遷移要求我們得認真細致,但是并不是說我們認真細致了就不會出錯了,總會有你考慮不到的地方,人也總會有大意的時候,一旦出錯,就需要你想辦法來補救,甚至只能是從頭再來。這種時候,就更加要求我們要有耐心,有韌性,每個做數據遷移的人,都要有應對各種復雜情況,以及多次反復遷移的心理準備。

遷移方法

基本流程

  數據遷移的基本流程包括需求分析、技術實現和遷移驗證3個重要環節。鑒于新老系統設計的差異和復雜性,需要進行遷移驗證,比較遷移后新老系統的運行差異,發現不足,通過多次迭代不斷優化遷移方案,實現系統切換后業務功能的平穩過渡。

需求分析

為了控制數據遷移的風險,減少系統切換當天遷移的數據量,需要將新系統的數據進行分類,有針對性地進行方案設計。

  1. 基礎業務數據。從數據特性來看,這部分數據在新系統業務規則確定以后不需改動,如組織結構、數據字典、業務規則等數據。從遷移角度,可以提前遷移完成并進行反復驗證;
  2. 動態業務數據。這些數據是老系統業務運營過程中動態生成的,具有不可預見性和變動快的特點,如客戶數據、收費數據、票據數據、變更數據等。歷史數據也屬于動態業務數據的范疇,由于必須切換時間窗口才能確定,所以無法提前測試,是整個遷移中風險較高的數據。

  在對各類數據進行分類以后,要確定遷移范圍,即遷移哪些數據、放棄哪些數據。

遷移場景

  在遷移范圍確定后,要分析和確認老系統業務數據在新系統中的表述形式,在遷移策略文檔明確描述新老系統各數據字段映射和關聯關系。以下列舉了6種典型的數據遷移場景。

  1. 單表轉換,是數據遷移中最簡單和理想的方式,一般存在于功能變化不大的業務模塊中,由于新老系統數據表示方法不一致,需要添加必要的映射和邏輯轉換;
  2. 單表合并,指原有系統一張表中的多條記錄在新系統中合并到一條記錄;
  3. 單表拆分,這種類型的遷移與單表合并場景產生的背景類似,可以參考多表合并場景;
  4. 一對多拆分,這種類型是指原有系統中一張表中的一條記錄被拆分到新系統中的多張數據庫表中,這是比較復雜的場景,一般由新老系統不同模塊間重新劃分變化引起,容易導致數據一致性問題,需要考慮兩條記錄的關聯約束關系;
  5. 多對一合并,這種類型的遷移可以參考一對多拆分場景;
  6. 完全重構,在該場景下,新系統的業務要素在老系統中不存在,需要根據新系統的業務邏輯重新生成,定義新系統數據的生成規則,其構建的難度和工作量最大。如果新系統中對于數據庫設計的約束不強,很容易產生一致性錯誤。

  以上場景以外,還存在一些老系統中的業務數據沒有遷移到新系統中,需要通過技術和業務分析,明確原因,以保證核心業務要素100%覆蓋。

技術實現
技術方案

  首先需要分析新老系統的存儲形式,對于不同的數據存儲形式選擇不同的技術方案,一般分為以下2種:

  1. 同一系列的關系數據庫。這種情況是數據遷移中最理想的狀態。一般廠商對于同系列數據庫產品會向下兼容,字段類型、操作語言和數據格式等方面具有一致性,可以減少遷移過程中的轉換,降低異常數據出現的幾率;
  2. 不同的關系數據庫產品。近年來,關系數據庫成為信息系統的首選,Oracle、MySQL、SqlServer等產品成為主流,這些產品雖然都采用了結構化查詢語言(SQL)標準,但是在具體的字段類型、操作語言和數據格式方面還存在一定的差異。在具體轉換時,如果需要使用數據庫SQL腳本進行遷移,則要對不同品牌的數據庫進行轉換。
遷移步驟
  1. 數據清洗,該步驟的目的是為了去除老系統中存在質量問題的異常數據,保證遷移成功;
  2. 數據轉換,就是從老系統中提取原始數據,按照需求分析確定的字段映射關系進行轉換;
  3. 數據生成,就是遷移的數據按照新系統數據和業務模型要求,生成新系統必須的業務要素數據;
  4. 數據導入,是完成數據遷移的最后一步,目的是把轉換完成的數據插入新系統的數據庫。
遷移驗證

  數據遷移對象是動態變化的數據,在業務流程中各種情況都可能出現,在允許范圍內對需求分析和遷移腳本進行充分測試和驗證是非常必要的。實際工作中,驗證測試的工作量甚至超過了需求分析和遷移腳本編寫之和,具體的驗證方法如下:

  1. 新老系統數據庫核對。這是最基本和快速的方法,通過比對老系統與遷移后新系統的數據條數和業務要素,快速確認遷移中數據清洗、提取、轉換、導入等各步驟的執行是否正確。由于數據量非常大,一般采用編寫核對腳本進行驗證,在遷移后快速執行;
  2. 新老系統界面核對。通過比對和操作新老系統實現相同功能的界面,可以有效驗證數據轉換的正確性;
  3. 并行運行測試。數據遷移的最大特點是不可預見性。由于數據字段狀態和關聯組合數量很大,需求分析難免會出現遺漏和差錯,此時基于遷移需求書的驗證方法很難發現與實際數據之間的差異,因此應采用并行運行的測試方法。

  無論采用何種方法都需要開發數據的轉換程序和新老系統數據的核對程序。其核心是對新老系統同一時期產生的業務數據連續比對差異,進行分析。此工作雖然工作量巨大,但卻至關重要,效果明顯。完備的并行測試不僅能對數據遷移的結果進行驗證,而且對新系統功能測試也是重要的補充。

遷移規約

【強制】按需求分析、技術實現、遷移驗證的流程進行,過程需有《數據遷移分析》、《數據遷移腳本》文檔留存。

【強制】公司本地備份老系統數據庫;公司本地部署老系統,供后續的業務分析使用,若不提供老系統,需對系統進行整體截圖;有條件情況下獲取數據結構文檔。

【強制】數據遷移后必須留有并行運行測試時間。

【推薦】涉及到關聯查詢、遷移的字段,無論在新老庫中,都可添加索引,縮短腳本執行時間。