數(shù)據(jù)遷移

背景

數(shù)據(jù)遷移工作是系統(tǒng)上線前一個(gè)非常重要的工作,也是系統(tǒng)上線后穩(wěn)定性的一個(gè)重要基礎(chǔ)。

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

眾齊軟件從事供熱信息化十幾年,截止目前做的大部分?jǐn)?shù)據(jù)遷移都是收費(fèi)系統(tǒng)數(shù)據(jù)。對(duì)供熱企業(yè)而言,收費(fèi)數(shù)據(jù)和資金息息相關(guān),涉及到錢就不是小事,數(shù)據(jù)遷移好了,應(yīng)收、實(shí)收都弄對(duì)了,對(duì)企業(yè)至關(guān)重要。

數(shù)據(jù)遷移可以說是一項(xiàng)非常精細(xì)化的工作,需要我們能夠分析出老系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)及各個(gè)字段的含義,通過與客戶進(jìn)行業(yè)務(wù)上的溝通以及老系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)的比對(duì)分析,來梳理清楚老系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)。眾齊軟件的實(shí)施顧問會(huì)結(jié)合新的供熱收費(fèi)系統(tǒng),弄明白怎么把這些舊有數(shù)據(jù)映射到新的數(shù)據(jù)庫,使其符合新系統(tǒng)的業(yè)務(wù)邏輯。

遷移案例

眾齊軟件已經(jīng)完成了上百家供熱企業(yè)的數(shù)據(jù)遷移工作,幫助他們實(shí)現(xiàn)了供熱數(shù)據(jù)和業(yè)務(wù)的延續(xù)性。由于市場早期占有率的原因,眾齊軟件對(duì)國內(nèi)主流的收費(fèi)軟件廠商的數(shù)據(jù)庫更是擁有豐富的數(shù)據(jù)遷移經(jīng)驗(yàn)。

遷移要求

數(shù)據(jù)遷移是一項(xiàng)重要、工作量大、嚴(yán)謹(jǐn)度高的工作。對(duì)于參與數(shù)據(jù)遷移工作的人有如下要求:

業(yè)務(wù)

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

技術(shù)

本地環(huán)境要有mysql,oracle,sqlserver三個(gè)數(shù)據(jù)庫還要有對(duì)應(yīng)的數(shù)據(jù)庫工具,并且會(huì)使用這些工具。能夠熟練地進(jìn)行較為復(fù)雜sql的編寫。

素質(zhì)

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

遷移方法

基本流程

  數(shù)據(jù)遷移的基本流程包括需求分析、技術(shù)實(shí)現(xiàn)和遷移驗(yàn)證3個(gè)重要環(huán)節(jié)。鑒于新老系統(tǒng)設(shè)計(jì)的差異和復(fù)雜性,需要進(jìn)行遷移驗(yàn)證,比較遷移后新老系統(tǒng)的運(yùn)行差異,發(fā)現(xiàn)不足,通過多次迭代不斷優(yōu)化遷移方案,實(shí)現(xiàn)系統(tǒng)切換后業(yè)務(wù)功能的平穩(wěn)過渡。

需求分析

為了控制數(shù)據(jù)遷移的風(fēng)險(xiǎn),減少系統(tǒng)切換當(dāng)天遷移的數(shù)據(jù)量,需要將新系統(tǒng)的數(shù)據(jù)進(jìn)行分類,有針對(duì)性地進(jìn)行方案設(shè)計(jì)。

  1. 基礎(chǔ)業(yè)務(wù)數(shù)據(jù)。從數(shù)據(jù)特性來看,這部分?jǐn)?shù)據(jù)在新系統(tǒng)業(yè)務(wù)規(guī)則確定以后不需改動(dòng),如組織結(jié)構(gòu)、數(shù)據(jù)字典、業(yè)務(wù)規(guī)則等數(shù)據(jù)。從遷移角度,可以提前遷移完成并進(jìn)行反復(fù)驗(yàn)證;
  2. 動(dòng)態(tài)業(yè)務(wù)數(shù)據(jù)。這些數(shù)據(jù)是老系統(tǒng)業(yè)務(wù)運(yùn)營過程中動(dòng)態(tài)生成的,具有不可預(yù)見性和變動(dòng)快的特點(diǎn),如客戶數(shù)據(jù)、收費(fèi)數(shù)據(jù)、票據(jù)數(shù)據(jù)、變更數(shù)據(jù)等。歷史數(shù)據(jù)也屬于動(dòng)態(tài)業(yè)務(wù)數(shù)據(jù)的范疇,由于必須切換時(shí)間窗口才能確定,所以無法提前測試,是整個(gè)遷移中風(fēng)險(xiǎn)較高的數(shù)據(jù)。

  在對(duì)各類數(shù)據(jù)進(jìn)行分類以后,要確定遷移范圍,即遷移哪些數(shù)據(jù)、放棄哪些數(shù)據(jù)。

遷移場景

  在遷移范圍確定后,要分析和確認(rèn)老系統(tǒng)業(yè)務(wù)數(shù)據(jù)在新系統(tǒng)中的表述形式,在遷移策略文檔明確描述新老系統(tǒng)各數(shù)據(jù)字段映射和關(guān)聯(lián)關(guān)系。以下列舉了6種典型的數(shù)據(jù)遷移場景。

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

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

技術(shù)實(shí)現(xiàn)
技術(shù)方案

  首先需要分析新老系統(tǒng)的存儲(chǔ)形式,對(duì)于不同的數(shù)據(jù)存儲(chǔ)形式選擇不同的技術(shù)方案,一般分為以下2種:

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

  數(shù)據(jù)遷移對(duì)象是動(dòng)態(tài)變化的數(shù)據(jù),在業(yè)務(wù)流程中各種情況都可能出現(xiàn),在允許范圍內(nèi)對(duì)需求分析和遷移腳本進(jìn)行充分測試和驗(yàn)證是非常必要的。實(shí)際工作中,驗(yàn)證測試的工作量甚至超過了需求分析和遷移腳本編寫之和,具體的驗(yàn)證方法如下:

  1. 新老系統(tǒng)數(shù)據(jù)庫核對(duì)。這是最基本和快速的方法,通過比對(duì)老系統(tǒng)與遷移后新系統(tǒng)的數(shù)據(jù)條數(shù)和業(yè)務(wù)要素,快速確認(rèn)遷移中數(shù)據(jù)清洗、提取、轉(zhuǎn)換、導(dǎo)入等各步驟的執(zhí)行是否正確。由于數(shù)據(jù)量非常大,一般采用編寫核對(duì)腳本進(jìn)行驗(yàn)證,在遷移后快速執(zhí)行;
  2. 新老系統(tǒng)界面核對(duì)。通過比對(duì)和操作新老系統(tǒng)實(shí)現(xiàn)相同功能的界面,可以有效驗(yàn)證數(shù)據(jù)轉(zhuǎn)換的正確性;
  3. 并行運(yùn)行測試。數(shù)據(jù)遷移的最大特點(diǎn)是不可預(yù)見性。由于數(shù)據(jù)字段狀態(tài)和關(guān)聯(lián)組合數(shù)量很大,需求分析難免會(huì)出現(xiàn)遺漏和差錯(cuò),此時(shí)基于遷移需求書的驗(yàn)證方法很難發(fā)現(xiàn)與實(shí)際數(shù)據(jù)之間的差異,因此應(yīng)采用并行運(yùn)行的測試方法。

  無論采用何種方法都需要開發(fā)數(shù)據(jù)的轉(zhuǎn)換程序和新老系統(tǒng)數(shù)據(jù)的核對(duì)程序。其核心是對(duì)新老系統(tǒng)同一時(shí)期產(chǎn)生的業(yè)務(wù)數(shù)據(jù)連續(xù)比對(duì)差異,進(jìn)行分析。此工作雖然工作量巨大,但卻至關(guān)重要,效果明顯。完備的并行測試不僅能對(duì)數(shù)據(jù)遷移的結(jié)果進(jìn)行驗(yàn)證,而且對(duì)新系統(tǒng)功能測試也是重要的補(bǔ)充。

遷移規(guī)約

【強(qiáng)制】按需求分析、技術(shù)實(shí)現(xiàn)、遷移驗(yàn)證的流程進(jìn)行,過程需有《數(shù)據(jù)遷移分析》、《數(shù)據(jù)遷移腳本》文檔留存。

【強(qiáng)制】公司本地備份老系統(tǒng)數(shù)據(jù)庫;公司本地部署老系統(tǒng),供后續(xù)的業(yè)務(wù)分析使用,若不提供老系統(tǒng),需對(duì)系統(tǒng)進(jìn)行整體截圖;有條件情況下獲取數(shù)據(jù)結(jié)構(gòu)文檔。

【強(qiáng)制】數(shù)據(jù)遷移后必須留有并行運(yùn)行測試時(shí)間。

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