虞秀洪 路清霞
摘要:在MIS系統(tǒng)的更新?lián)Q代中,數(shù)據(jù)遷移與轉(zhuǎn)換就顯得尤為重要和迫切,數(shù)據(jù)遷移的成功與否直接關(guān)系到系統(tǒng)切換的成敗。文章介紹了數(shù)據(jù)遷移技術(shù)在電力MIS中的應(yīng)用。
關(guān)鍵詞:數(shù)據(jù)遷移技術(shù);電力MIS;系統(tǒng)切換;ZEPCIS
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-2374(2009)05-0018-02
信息技術(shù)發(fā)展日新月異,許多MIS從單機(jī)系統(tǒng)升級到C/S,再發(fā)展到目前廣為流行的B/S結(jié)構(gòu),相應(yīng)的數(shù)據(jù)庫也是從單機(jī)版發(fā)展到網(wǎng)絡(luò)數(shù)據(jù)庫。特別是在MIS系統(tǒng)的更新?lián)Q代中,數(shù)據(jù)遷移與轉(zhuǎn)換就顯得尤為重要和迫切,數(shù)據(jù)遷移的成功與否直接關(guān)系到系統(tǒng)切換的成敗。
在我們向浙江省70多個縣、區(qū)、市推廣浙江省電力營銷信息系統(tǒng)(ZEPCIS)中,數(shù)據(jù)遷移技術(shù)顯的尤為重要和迫切。在我們推廣ZEPCIS系統(tǒng)前,各個電力局都有用電管理信息系統(tǒng),每個局所使用的數(shù)據(jù)庫也不盡相同,包括Fox Base、SQL Server、Fox Pro、Access、Sybase、Oracle等,而新系統(tǒng)ZEPCIS考慮到數(shù)據(jù)的安全性、穩(wěn)定性、數(shù)據(jù)效率和系統(tǒng)的可擴(kuò)充性,使用Oracle數(shù)據(jù)庫,不可能丟掉源系統(tǒng)的數(shù)據(jù)而通過全新的數(shù)據(jù)錄入到目標(biāo)系統(tǒng),就存在一個數(shù)據(jù)遷移問題,也就是要把源系統(tǒng)的數(shù)據(jù)遷移到目標(biāo)數(shù)據(jù)庫。
一、實現(xiàn)方法
在系統(tǒng)開發(fā)和推廣初期,我們一直在探索如何用高效簡捷的方法實現(xiàn)數(shù)據(jù)轉(zhuǎn)換和遷移,進(jìn)而按時完成全省ZEPCIS系統(tǒng)的推廣和應(yīng)用。
ZEPCIS系統(tǒng)主要包括業(yè)擴(kuò)與變更管理、電費(fèi)計算電量管理、電能計量管理、用電檢查管理等四大模塊,數(shù)據(jù)庫中總共有338個表。ZEPCIS系統(tǒng)與原來各電力局所使用的用電管理信息系統(tǒng)在數(shù)據(jù)庫設(shè)計、表結(jié)構(gòu)、字段編碼、代碼及含義等方面不盡相同,則給系統(tǒng)切換與數(shù)據(jù)遷移帶來了較大的難度與困難。我們曾經(jīng)試探性的用Delphi來開發(fā)統(tǒng)一的軟件來完成數(shù)據(jù)遷移;在幾個局的試驗以后發(fā)現(xiàn)由于原系統(tǒng)的數(shù)據(jù)庫設(shè)計與ZEPCIS差異實在太大,單一的工具軟件很難完成全省用電管理信息系統(tǒng)的轉(zhuǎn)換。在經(jīng)過多次探索和試驗以后,我們最終決定采用通過中間數(shù)據(jù)庫過渡的辦法和用SQL腳本來實現(xiàn)數(shù)據(jù)靈活遷移。整個數(shù)據(jù)遷移總體流程如圖1所示。
(一)分析和比較源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫,設(shè)計制定數(shù)據(jù)轉(zhuǎn)換詳細(xì)方案
在這一步工作中,主要找出源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫中表、字段、數(shù)據(jù)等內(nèi)容的對應(yīng)關(guān)系。首先,確定需要遷移的數(shù)據(jù)。通過分析源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫中數(shù)據(jù)表的性質(zhì)、如檔案數(shù)據(jù)、代碼數(shù)據(jù)、中間業(yè)務(wù)流程數(shù)據(jù)和歷史數(shù)據(jù)等,根據(jù)目標(biāo)系統(tǒng)確定要轉(zhuǎn)換的數(shù)據(jù)。通過分析和比較兩個數(shù)據(jù)庫的數(shù)據(jù)字典,找出表結(jié)構(gòu)、代碼、編碼、字段類型及含義的差異與對應(yīng)關(guān)系。表與表之間、字段與字段之間可能存在一一對應(yīng)、多對一、一對多和多對多等關(guān)系,通過確定對應(yīng)關(guān)系,制定詳細(xì)數(shù)據(jù)轉(zhuǎn)接方案。
(二)根據(jù)數(shù)據(jù)轉(zhuǎn)接方案,用SQL腳本設(shè)計數(shù)據(jù)轉(zhuǎn)換程序
不同數(shù)據(jù)庫在字段類型定義、提供擴(kuò)充函數(shù)等方面都有較大差異。根據(jù)數(shù)據(jù)轉(zhuǎn)接方案在設(shè)計數(shù)據(jù)轉(zhuǎn)換程序的時候要考慮到這方面的差異。有了數(shù)據(jù)轉(zhuǎn)接方案,我們就可以用SQL寫出具體、詳細(xì)的腳本程序。
(三)源數(shù)據(jù)庫復(fù)制到中間數(shù)據(jù)庫
中間數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫是同一類型的數(shù)據(jù)庫。在ZEPCIS系統(tǒng)的推廣過程中,中間數(shù)據(jù)庫也是用Oracle。中間數(shù)據(jù)庫擁有ZEPCIS系統(tǒng)中的庫結(jié)構(gòu),與目標(biāo)數(shù)據(jù)庫的不同之處在于中間數(shù)據(jù)庫中沒有完整性約束。數(shù)據(jù)庫完整性(Database Integrity)是指數(shù)據(jù)庫中數(shù)據(jù)的正確性和相容性。數(shù)據(jù)庫完整性約束可分為6類:列級靜態(tài)約束、元組級靜態(tài)約束、關(guān)系級靜態(tài)約束、列級動態(tài)約束、元組級動態(tài)約束、關(guān)系級動態(tài)約束。因此,在中間數(shù)據(jù)庫的ZEPCIS庫結(jié)構(gòu)中,沒有字段非空、長度、主鍵和外鍵等限制和定義。
為了便于異構(gòu)數(shù)據(jù)庫之間的數(shù)據(jù)轉(zhuǎn)換,在系統(tǒng)推廣過程中,我們發(fā)現(xiàn)把源數(shù)據(jù)庫統(tǒng)一拷貝到中間數(shù)據(jù)庫后再進(jìn)行處理比較方便和高效。在Oracle中,我們建立一個單獨(dú)的用戶,把源數(shù)據(jù)庫的數(shù)據(jù)統(tǒng)一放到該用戶下。進(jìn)行數(shù)據(jù)庫拷貝的工具很多,如Dephi提供的Datadump等。通過配置BDE,再用Datadump工具實現(xiàn)源數(shù)據(jù)庫拷貝到目標(biāo)數(shù)據(jù)庫,在拷貝過程中,我們有時發(fā)現(xiàn)在不同的數(shù)據(jù)庫數(shù)據(jù)轉(zhuǎn)換中出現(xiàn)一些異常現(xiàn)象,如數(shù)據(jù)拷貝過去后,發(fā)現(xiàn)數(shù)據(jù)不一致(數(shù)字出現(xiàn)四舍五入)和大表(含有百萬條數(shù)據(jù)的表)只拷貝部分?jǐn)?shù)據(jù)等情況,則
可以通過檢查調(diào)整系統(tǒng)配置或者進(jìn)行一些臨時處理來解決,如放大數(shù)字倍數(shù)和把大表調(diào)整為幾個小表等來處理。源數(shù)據(jù)拷貝到中間庫后,要檢查數(shù)據(jù)的完整性和一致性。
(四)化異構(gòu)數(shù)據(jù)庫為同一數(shù)據(jù)庫,用SQL腳本實現(xiàn)數(shù)據(jù)靈活遷移
通過數(shù)據(jù)拷貝后,化異構(gòu)數(shù)據(jù)庫為同一數(shù)據(jù)庫,大大方便了數(shù)據(jù)的轉(zhuǎn)換和遷移。源數(shù)據(jù)庫的數(shù)據(jù)導(dǎo)入中間數(shù)據(jù)庫后,就可以用數(shù)據(jù)轉(zhuǎn)接程序把源數(shù)據(jù)導(dǎo)入中間數(shù)據(jù)庫。由于數(shù)據(jù)轉(zhuǎn)換程序是根據(jù)源系統(tǒng)與目標(biāo)系統(tǒng)的設(shè)計而制定SQL腳本,是比較理想的程序。在實際數(shù)據(jù)轉(zhuǎn)換過程,由于源數(shù)據(jù)的差異、重復(fù)、缺失等原因而導(dǎo)致SQL腳本在具體的執(zhí)行中出現(xiàn)一些意外情況,需要根據(jù)具體情況對數(shù)據(jù)轉(zhuǎn)換程序及時進(jìn)行調(diào)整和修改。對導(dǎo)入到中間庫后,我們要按照目標(biāo)數(shù)據(jù)庫的要求對中間庫的數(shù)據(jù)進(jìn)行統(tǒng)一嚴(yán)格的校驗、檢查和修改。
(五)對中間庫實時更新數(shù)據(jù)
對于這一步,要視具體源系統(tǒng)的情況而定。對于一些源系統(tǒng)的數(shù)據(jù)基本能滿足目標(biāo)系統(tǒng)數(shù)據(jù)的需要,可以略過這一步,在系統(tǒng)切換時,統(tǒng)一從原系統(tǒng)取數(shù)據(jù)。而對源系統(tǒng)與目標(biāo)系統(tǒng)在系統(tǒng)功能設(shè)計差異比較大,缺少很多目標(biāo)數(shù)據(jù)的情況下,建議通過普查數(shù)據(jù)等手段補(bǔ)充數(shù)據(jù)。對于原系統(tǒng)業(yè)務(wù)變更中產(chǎn)生的數(shù)據(jù)變化也要及時錄入中間庫。
(六)中間數(shù)據(jù)庫到目標(biāo)數(shù)據(jù)庫間的數(shù)據(jù)轉(zhuǎn)換
中間數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫在表結(jié)構(gòu)上基本一致,唯一的不同就是中間庫缺少數(shù)據(jù)的完整性約束,所以數(shù)據(jù)轉(zhuǎn)換程序相對簡單,這部分程序在各個局的推廣過程中程序腳本一致。通過建立Oracle的數(shù)據(jù)鏈接實現(xiàn)兩個Oracle數(shù)據(jù)庫之間的數(shù)據(jù)遷移。由于目標(biāo)庫有完整性約束,所以在寫數(shù)據(jù)轉(zhuǎn)換程序的時候,要注意數(shù)據(jù)間的邏輯順序,數(shù)據(jù)導(dǎo)入的先后順序。
二、結(jié)語
通過三年多時間的推廣,我們完成了浙江省70多個縣、區(qū)、市浙江省電力營銷信息系統(tǒng)的數(shù)據(jù)遷移和系統(tǒng)推廣工作,得到了國家電力公司的肯定和取得了用戶的一直好評。數(shù)據(jù)遷移是一項較為復(fù)雜的操作技術(shù),它直接關(guān)系到新系統(tǒng)運(yùn)行的成敗,同時也牽涉到系統(tǒng)的二次開發(fā)和移值問題,通過對數(shù)據(jù)進(jìn)行分類,化異構(gòu)為同一數(shù)據(jù)庫,通過SQL腳本靈活遷移,建立對應(yīng)關(guān)系,通過數(shù)據(jù)檢查和校驗確保數(shù)據(jù)完整性,符合電力系統(tǒng)的要求,具有普遍性,為電力系統(tǒng)數(shù)據(jù)庫遷移提供了參考和借鑒。