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