夏均忠,馬宗坡,白云川,王 萌
(軍事交通學(xué)院汽車工程系,天津 300161)
當(dāng)前各級、各類檢測站中多種檢測方式和檢測控制系統(tǒng)并存的現(xiàn)狀,造成了檢測機(jī)構(gòu)數(shù)據(jù)庫和數(shù)據(jù)庫表異構(gòu)現(xiàn)象明顯的問題,給數(shù)據(jù)的匯總、分析等造成很大影響。數(shù)據(jù)庫的異構(gòu)體現(xiàn)在各檢測機(jī)構(gòu)控制系統(tǒng)使用的不同數(shù)據(jù)庫,如Access、SQL Server 2000等;數(shù)據(jù)庫表的異構(gòu)體現(xiàn)在字段名和表名的異構(gòu),相關(guān)字段由于對數(shù)據(jù)值的要求不同而產(chǎn)生的異構(gòu)等[1-3]。
經(jīng)過十幾年的發(fā)展,各檢測機(jī)構(gòu)已經(jīng)保存了大量的日常業(yè)務(wù)數(shù)據(jù)。為了統(tǒng)一規(guī)范這些數(shù)據(jù)源,從而有效地進(jìn)行檢測數(shù)據(jù)匯總、統(tǒng)計、分析和決策,本文研究了基于DTS的汽車檢測線Access數(shù)據(jù)源到SQL Server數(shù)據(jù)源的轉(zhuǎn)換。
數(shù)據(jù)轉(zhuǎn)換服務(wù)(digital transformation service,DTS)是SQL Server的一個組件,它提供了多種異構(gòu)數(shù)據(jù)庫之間的數(shù)據(jù)轉(zhuǎn)換模型,可用于在一個或多個數(shù)據(jù)源(如 SQL Server、Excel、Access、ORACLE)間進(jìn)行數(shù)據(jù)導(dǎo)入、導(dǎo)出和轉(zhuǎn)換。DTS還可通過ActiveX腳本語言,如VB Script來轉(zhuǎn)換數(shù)據(jù),數(shù)據(jù)轉(zhuǎn)換腳本可以執(zhí)行能在腳本語言中執(zhí)行的任何動作,這種靈活性使DTS成了一個強大的數(shù)據(jù)遷移工具[4-7]。
DTS包的對象結(jié)構(gòu)如圖1所示。連接對象定義數(shù)據(jù)源及數(shù)據(jù)目的;任務(wù)對象定義工作項目,例如ActiveX轉(zhuǎn)化、數(shù)據(jù)驅(qū)動的查詢?nèi)蝿?wù)等;步驟對象定義任務(wù)對象執(zhí)行的次序。
圖1 DTS轉(zhuǎn)換包結(jié)構(gòu)圖
在關(guān)系數(shù)據(jù)庫中,元數(shù)據(jù)就是對表、列等的定義。通過ADO中CONNECTION對象的GetTableNames方法可以得到數(shù)據(jù)源的表信息,而通過ADO中RECORDSET對象的FieldDefs屬性可以得到各種列信息和類型信息[8]。
在得到元數(shù)據(jù)前,必須創(chuàng)建CONNECTION對象連接數(shù)據(jù)源,通過數(shù)據(jù)集對象RECORDSET來打開相應(yīng)的數(shù)據(jù)表,取得相應(yīng)的元數(shù)據(jù)。
對不同數(shù)據(jù)庫系統(tǒng),每個DBMS都定義了一套自己的數(shù)據(jù)類型,但不論數(shù)據(jù)類型在各個系統(tǒng)中如何變化,其功能都滿足用戶的數(shù)據(jù)處理基本要求。如數(shù)值型,包括整型、實型、浮點型、雙精度型等;字符型,包括定長、變長等;日期型,包括年、月、日和小時、分、秒等。
異構(gòu)數(shù)據(jù)庫數(shù)據(jù)類型轉(zhuǎn)換的關(guān)鍵是找出其中的對應(yīng)關(guān)系。
在數(shù)據(jù)轉(zhuǎn)換過程中,必須要確定兩種模型中所存在的各種語法和語義上的沖突,這些沖突可能包括:
(1)命名沖突。源數(shù)據(jù)源的標(biāo)識符可能是目的數(shù)據(jù)源中的保留字。
(2)格式?jīng)_突。同一種數(shù)據(jù)類型可能有不同的表示方法和語義差異,如檢測線數(shù)據(jù)庫中有用大寫英文字母“E,T,F(xiàn)”表示檢測結(jié)果合格與否,也有直接用漢字表示。
(3)類型沖突。不同數(shù)據(jù)庫的同一種數(shù)據(jù)類型存在精度之間的差異。
對于數(shù)據(jù)轉(zhuǎn)換中的沖突最理想處理方法是借助轉(zhuǎn)換工具自動實現(xiàn)。
數(shù)據(jù)的完整性主要是指數(shù)據(jù)的正確性和相容性。如發(fā)動機(jī)號碼或底盤號碼不唯一。在關(guān)系型數(shù)據(jù)庫中,主要有實體完整性、參照完整性和用戶定義的完整性3類。實體完整性和參照完整性是關(guān)系模型必須滿足的完整性約束條件[9-11]。
在數(shù)據(jù)轉(zhuǎn)換過程中依據(jù)數(shù)據(jù)目的表的約束,對導(dǎo)入數(shù)據(jù)進(jìn)行一一核查,出現(xiàn)不符合完整性約束的垃圾數(shù)據(jù)時,應(yīng)予以即時清除。
設(shè)計DTS轉(zhuǎn)換包的流程依次為建立連接對象、建立任務(wù)對象、建立步驟對象。
DTS提供了3種連接類型:
(1)數(shù)據(jù)源連接。通過OLE DB Provider或ODBC驅(qū)動程序來連接數(shù)據(jù)源或數(shù)據(jù)目的。
(2)文件連接。用于連接以文本文件作為數(shù)據(jù)源與數(shù)據(jù)目的。
(3)Microsoft Data Link連接。DTS包使用 Microsoft Data Link文件建立OLE DB連接以解決執(zhí)行時的連接問題。
數(shù)據(jù)源連接與文件連接用于在建立DTS包時連接相關(guān)屬性已經(jīng)確定的數(shù)據(jù)源與數(shù)據(jù)目的連接,而Microsoft Data Link連接用于在建立DTS包時連接相關(guān)屬性不確定,而只有在執(zhí)行DTS包前才能確定連接屬性的數(shù)據(jù)連接。
由于在建立DTS轉(zhuǎn)換包時無法確定源數(shù)據(jù)庫所在目錄、用戶密碼等連接屬性,所以對數(shù)據(jù)源采用Microsoft Data Link連接。在開始轉(zhuǎn)換前通過選擇和輸入獲取源數(shù)據(jù)庫的連接相關(guān)屬性。
而數(shù)據(jù)目的連接屬性在建立DTS包前就已確定,所以對數(shù)據(jù)目的的連接采用數(shù)據(jù)源連接方式。
在新建的DTS包中使用數(shù)據(jù)驅(qū)動的查詢?nèi)蝿?wù)和ActiveX腳本任務(wù)來完成DTS任務(wù)。數(shù)據(jù)驅(qū)動的查詢?nèi)蝿?wù)用于數(shù)據(jù)Transact-SQL操作,完成新建、修改與刪除數(shù)據(jù)目的中的數(shù)據(jù)記錄。ActiveX腳本任務(wù)用來完成其他操作,如訪問配置文件、全局變量的設(shè)置與訪問、數(shù)據(jù)記錄集的訪問等。
共建立了17個DTS任務(wù)來完成數(shù)據(jù)轉(zhuǎn)換任務(wù),這些任務(wù)分為3類:
(1)車輛基本信息的轉(zhuǎn)換。包括車輛VIN、發(fā)動機(jī)號碼、底盤號碼、車輛顏色、使用階段、車牌號碼等信息的轉(zhuǎn)換。
(2)檢測站信息的轉(zhuǎn)換。包括檢測站基本信息轉(zhuǎn)換、設(shè)備管理數(shù)據(jù)轉(zhuǎn)換。
(3)檢測結(jié)果的轉(zhuǎn)換。包括車輛檢測信息轉(zhuǎn)換、車輛評價結(jié)果轉(zhuǎn)換、各工位檢測結(jié)果轉(zhuǎn)換等。
圖2為車輛基本信息轉(zhuǎn)換任務(wù)圖,主要完成車輛基本信息的轉(zhuǎn)換工作。
圖2 車輛基本信息轉(zhuǎn)換任務(wù)圖
車輛基本信息轉(zhuǎn)換任務(wù)中使用的是數(shù)據(jù)驅(qū)動的查詢?nèi)蝿?wù),通過VB Script語言來進(jìn)行數(shù)據(jù)字段的轉(zhuǎn)換。部分VB Script腳本代碼如下:
DTS步驟是建立一個工作流結(jié)構(gòu)以控制DTS包中各個DTS任務(wù)的執(zhí)行順序。每一個DTS任務(wù)必須至少與一個DTS步驟相關(guān)聯(lián),否則該DTS任務(wù)將不會被執(zhí)行。通過建立DTS步驟完成汽車檢測線Access數(shù)據(jù)源到SQL Server數(shù)據(jù)源的數(shù)據(jù)轉(zhuǎn)換服務(wù)。
圖3 DTS轉(zhuǎn)換包結(jié)構(gòu)圖
當(dāng)DTS包被執(zhí)行時,會連接至正確的數(shù)據(jù)源、復(fù)制數(shù)據(jù)、轉(zhuǎn)換數(shù)據(jù)和處理某些事務(wù)。包的執(zhí)行方式有多種:在Enterprise Manager中執(zhí)行;使用命令行工具dtsrun執(zhí)行;使用圖形界面工具dtsrunui執(zhí)行;在前端應(yīng)用程序調(diào)用DTS包對象的Execute方法執(zhí)行等。為了能使DTS包在脫離SQL Server軟件環(huán)境下獨立運行,并且始終運行最新版本的DTS包,提高轉(zhuǎn)換效率,本文選擇了在前端Visual Basic.net程序調(diào)用DTS包對象的Execute方法。該方法使用簡單、靈活,而且可以轉(zhuǎn)換大部分?jǐn)?shù)據(jù)庫數(shù)據(jù)源、文本文件等異構(gòu)數(shù)據(jù)源,適用范圍較廣。
在DTS設(shè)計器中設(shè)計了轉(zhuǎn)換包后,為了方便復(fù)制、遷移和傳送DTS包,將其存儲為一個結(jié)構(gòu)化存儲文件,文件完整的磁盤路徑設(shè)為X:…VIT.dts。
基于DTS的汽車檢測線異構(gòu)數(shù)據(jù)源轉(zhuǎn)換研究,實現(xiàn)了汽車檢測線Access數(shù)據(jù)源到SQL Server數(shù)據(jù)源的轉(zhuǎn)換,能夠統(tǒng)一規(guī)范各檢測站汽車檢測數(shù)據(jù)庫,便于汽車檢測數(shù)據(jù)的匯總、統(tǒng)計和分析決策。
由于DTS可以通過圖形化的DTS設(shè)計器和導(dǎo)入導(dǎo)出向?qū)Ы换ナ绞褂?,操作簡單方便,可移植性強[12],更容易被一線檢測人員接受和掌握,具有相當(dāng)?shù)膶嵱眯浴?/p>
[1] 夏均忠.汽車檢測技術(shù)與設(shè)備[M].北京:機(jī)械工業(yè)出版社,2009.
[2]陳建平,張會章.汽車安全檢測系統(tǒng)的設(shè)計與實現(xiàn)[J].微計算機(jī)信息,2006,22(122):229-231.
[3] 趙祥模,馬建,關(guān)可,等.汽車綜合性能分布式計算機(jī)網(wǎng)絡(luò)自動測控系統(tǒng)[J].長安大學(xué)學(xué)報:自然科學(xué)版,2003(5):94-98.
[4] 王俊偉,史創(chuàng)明.SQL Server2000中文版數(shù)據(jù)庫管理與應(yīng)用標(biāo)準(zhǔn)教程[M].北京:清華大學(xué)出版社,2006:380-399.
[5] Rankins R,Garbus J R,Solomon D,et al.Sybase SQL Server 11 UN-LEASHED[M].The United States:Sams Publishing,1996.
[6] 高建強,李偉,秦克明.異構(gòu)數(shù)據(jù)源間數(shù)據(jù)轉(zhuǎn)換技術(shù)的研究與實現(xiàn)[J].計算機(jī)工程,2005,31(18):93-95.
[7] 周永鋒,鄧蘇,楊強,等.基于DTS對象模型的DTS包實現(xiàn)[J].計算機(jī)應(yīng)用,2002,22(11):112-113.
[8] 李學(xué)榮,李莎.基于元數(shù)據(jù)的異構(gòu)數(shù)據(jù)源集成系統(tǒng)設(shè)計與實現(xiàn)[J].計算機(jī)應(yīng)用,2005(25):209-210.
[9] 馬廣慧,邵秀麗,李耀芳.基于XML的異構(gòu)數(shù)據(jù)源間數(shù)據(jù)交換的實現(xiàn)[J].天津師范大學(xué)學(xué)報:自然科學(xué)版,2008,28(1):76-80.
[10]Collins S R,Navathe S,Mark L.XML schema mappings for heterogeneous database access[J].Information and Software Technology,2002,44(4):251-257.
[11]何繪宇.構(gòu)件式遠(yuǎn)程校準(zhǔn)系統(tǒng)設(shè)計與應(yīng)用[J].中國測試,2009,35(4):126-128.
[12]王勝德,楊學(xué)強.利用DTS實現(xiàn)異構(gòu)數(shù)據(jù)庫的數(shù)據(jù)交換[J].計算機(jī)應(yīng)用,2003,23(7):132-134.