摘要: 為了完成數據合并、存檔和分析等任務(wù);為了進(jìn)行應用程序開(kāi)發(fā);為了進(jìn)行數據庫或服務(wù)器升級,數據庫管理員經(jīng)常需要導入、導出以及轉換數據。SQL Server 2000 中的數據轉換服務(wù)(DTS)為此提供了一組圖形化工具和可編程對象,能夠幫助管理員和開(kāi)發(fā)人員解決從不同來(lái)源到單個(gè)或多個(gè)目標的數據轉移問(wèn)題,包括數據提取、轉換以及合并。您可以將任務(wù)、工作流操作和限制條件組成 DTS數據包,然后安排定期或在特定事件發(fā)生時(shí)執行該數據包。本白皮書(shū)將介紹 DTS,給出一些能夠用于創(chuàng )建 DTS 解決方案的組件和服務(wù),介紹如何使用 DTS Designer 來(lái)實(shí)施 DTS 解決方案,最后將介紹 DTS 應用程序開(kāi)發(fā)。

![]() |
DTS 簡(jiǎn)介 |
![]() |
使用 DTS Designer |
![]() |
保存 DTS 數據包的選項 |
![]() |
將 DTS 作為應用程序開(kāi)發(fā)平臺 |
大部分公司的數據都具有多種存儲格式和存儲位置。為了支持決策制定、提高系統性能或升級現有系統,經(jīng)常必須將數據從一個(gè)數據存儲位置轉移到另一個(gè)位置。
Microsoft SQL Server 2000 數據轉換服務(wù)(DTS)為此提供了一系列的工具,您可以用來(lái)從不同來(lái)源將數據提取、轉換和合并到單個(gè)或多個(gè)目標。通過(guò)使用DTS工具,您可以根據公司的特殊需求創(chuàng )建定制的數據移動(dòng)解決方案,正如下面這些情形:
| ? |
您已經(jīng)在早期版本的 SQL Server 或其他平臺(例如 Microsoft Access)上部署了一個(gè)數據庫應用程序?,F在,新版本的應用程序需要 SQL Server 2000,而且需要更改數據庫架構,并轉換部分數據類(lèi)型。 |
| ? |
為了復制和轉換數據,可以構建一個(gè) DTS 解決方案,將數據庫對象從原始數據源復制到 SQL Server 2000 數據庫中,同時(shí)重新設置數據欄并更改數據類(lèi)型。您可以使用 DTS 工具來(lái)運行這個(gè)解決方案,或者將這個(gè)解決方案嵌入到您的應用程序中。 |
| ? |
您必須將一些關(guān)鍵的 Microsoft Excel 電子表格合并到 SQL Server 數據庫中。很多部門(mén)在每月底創(chuàng )建電子表格,但是沒(méi)有設置日程安排來(lái)完成所有的電子表格。 |
| ? |
為了合并電子表格數據,您可以構建一個(gè) DTS 解決方案,使其在消息被發(fā)送到消息隊列時(shí)執行。這個(gè)消息將觸發(fā) DTS,使其從電子表格中提取數據,執行各種定義的轉換,然后將數據裝載到 SQL Server 數據庫中。 |
| ? |
您的數據倉庫中保存了有關(guān)業(yè)務(wù)操作的歷史數據,您要使用 Microsoft SQL Server 2000 分析服務(wù)來(lái)匯總這些數據。這個(gè)數據倉庫需要每天夜間從聯(lián)機事務(wù)處理(OLTP)數據庫進(jìn)行更新。而您的 OLTP 系統一天 24 小時(shí)都在使用中,其性能十分關(guān)鍵。 您可以構建一個(gè) DTS 解決方案,使用文件傳輸協(xié)議(FTP)將數據文件移動(dòng)到本地驅動(dòng)器中,將數據裝載到事實(shí)表中,然后使用分析服務(wù)對數據進(jìn)行統計。您可以安排這個(gè) DTS 解決方案每天夜間執行,也可以使用新的 DTS 日志選項來(lái)跟蹤這個(gè)過(guò)程所用的時(shí)間,使您能夠分析性能隨時(shí)間的變化。 |
DTS 是一組數據轉換工具,您可以用來(lái)在一個(gè)或多個(gè)數據源(例如 Microsoft SQL Server、 Microsoft Excel 或 Microsoft Access)之間進(jìn)行不同類(lèi)型數據的導入、導出和轉換。其中的連通性通過(guò)數據訪(fǎng)問(wèn)的開(kāi)放式標準-OLE DB-來(lái)提供。ODBC(開(kāi)放式數據庫連接)數據源由 OLE DB Provider for ODBC 來(lái)支持。
您可以將 DTS 解決方案創(chuàng )建為一個(gè)或多個(gè)數據包。每個(gè)數據包中可以包含一組有序的任務(wù),定義所要執行的工作,也可以包含數據和對象的轉換、定義任務(wù)執行的工作流限制以及數據源和目標的連接等。DTS 數據包也提供記錄數據包執行細節、控制事務(wù)以及處理全局變量等服務(wù)。
下列工具可以用于創(chuàng )建和執行 DTS 數據包:
| ? |
導入/導出向導(Import/Export Wizard)用于構建相對簡(jiǎn)單的 DTS 數據包,支持數據遷移和簡(jiǎn)單轉換。 |
| ? |
DTS Designer 圖形化地實(shí)施 DTS 對象模型,允許您創(chuàng )建具有大量功能的 DTS 數據包。 |
| ? |
DTSRun是一個(gè)命令提示符實(shí)用程序,用來(lái)執行已有的 DTS 數據包。 |
| ? |
DTSRunUI 是DTSRun的圖形化界面, 也允許傳遞全局變量和生成命令行。 |
| ? |
SQLAgent 不是一個(gè) DTS 應用程序;但是 DTS 可以用它來(lái)安排數據包的執行。 |
您也可以使用 DTS 對象模型通過(guò)編程創(chuàng )建和運行數據包,構建定制任務(wù)以及構建定制轉換。
Microsoft SQL Server 2000 引入了許多 DTS 增強和新特性:
| ? |
新的 DTS 任務(wù)包括 FTP 任務(wù)、執行數據包任務(wù)、動(dòng)態(tài)屬性任務(wù)以及消息隊列任務(wù)。 |
| ? |
增強的日志功能記錄了每個(gè)數據包執行的信息,允許您擁有完整的執行歷史,并能查看任務(wù)中每個(gè)步驟的信息。您可以生成異常文件,包含可能由于錯誤而沒(méi)有執行的數據行。 |
| ? |
您可以將 DTS 數據包保存為 Microsoft Visual Basic 文件。 |
| ? |
新的多段數據泵允許高級用戶(hù)在不同階段定制數據轉換操作。同時(shí),也可以使用全局變量作為查詢(xún)的輸入參數。 |
| ? |
您可以在 DTS 轉換任務(wù)和執行 SQL 任務(wù)中使用參數化的源查詢(xún)。 |
| ? |
您可以使用執行數據包任務(wù),動(dòng)態(tài)地將全局變量的取值從父數據包分配到子數據包。 |
DTS Designer 圖形化地實(shí)施 DTS 對象模型,允許您圖形化地創(chuàng )建 DTS 數據包。您可以使用 DTS Designer 來(lái):
| ? |
創(chuàng )建包含一個(gè)或多個(gè)步驟的簡(jiǎn)單數據包。 |
| ? |
創(chuàng )建包含復雜工作流的數據包,這些工作流中可包含使用有條件邏輯的多步操作、事件驅動(dòng)的代碼或多個(gè)數據源的連接。 |
| ? |
編輯已有的數據包。 |
DTS Designer 界面由工作區域、工具欄和菜單組成。其中工作區域用于構建數據包,工具欄包含有數據包元素,您可以將它們拖動(dòng)到設計頁(yè)中,菜單中包含有工作流和數據包管理命令。
在 DTS Designer 中,您可以將連接和任務(wù)拖動(dòng)到設計頁(yè)中,并指定工作流執行的順序,從而輕松地創(chuàng )建功能強大的 DTS 數據包。下面的內容將定義任務(wù)、工作流、連接和轉換,并介紹如何使用 DTS Designer 輕松地實(shí)施 DTS 解決方案。
DTS 數據包中通常包含一個(gè)或多個(gè)步驟。每個(gè)任務(wù)定義了一個(gè)可能在數據包執行過(guò)程中執行的工作項目。您可以使用任務(wù)來(lái):
| ? |
轉換數據
|
|||||||||||||||||||||||||||
| ? |
復制和管理數據
|
|||||||||||||||||||||||||||
| ? |
從數據包中將任務(wù)作為作業(yè)運行
|
1 SQL Server 2000中新增。
2 僅適用于已安裝 SQL Server 2000 分析服務(wù)的情形。
您可以程序化地創(chuàng )建定制任務(wù),然后使用 Register Custom Task(注冊定制任務(wù))命令將它們集成到 DTS Designer 中。
為了說(shuō)明這些任務(wù)的使用,在這里我們給出了一個(gè)包含兩個(gè)任務(wù)的簡(jiǎn)單 DTS 數據包: Microsoft ActiveX Script 任務(wù)和 Send Mail 任務(wù):

圖2:具有兩個(gè)任務(wù)的 DTS 數據包
ActiveX Script 任務(wù)可以駐留任何 ActiveX 腳本引擎,包括 Microsoft Visual Basic Scripting Edition (VBScript)、Microsoft JScript 或者 ActiveState ActivePerl(您可以從http://www.activestate.com [英文]下載)。 Send Mail 任務(wù)可以發(fā)送消息,指出該數據包已經(jīng)運行。請注意,這些任務(wù)是沒(méi)有順序的。在執行數據包時(shí),ActiveX Script 任務(wù)和 Send Mail 任務(wù)同時(shí)運行。
當您在定義一組任務(wù)時(shí),通常任務(wù)的執行是應該有一定順序的。如果這些任務(wù)擁有一定的順序,那么每個(gè)任務(wù)將稱(chēng)為一個(gè)過(guò)程中的一個(gè)步驟。在 DTS Designer 中,您可以在 DTS Designer 設計頁(yè)中對任務(wù)進(jìn)行操作,使用優(yōu)先級限制來(lái)控制任務(wù)執行的順序。
優(yōu)先級限制將數據包中的任務(wù)依次鏈接起來(lái)。下表給出了您可以在 DTS 中使用的優(yōu)先級限制的類(lèi)型。
| 優(yōu)先級限制 | 說(shuō)明 |
![]() On Completion(完成后) (藍色箭頭) |
如果您希望任務(wù) 2 處于等待狀態(tài),直至任務(wù) 1 完成(無(wú)論結果如何),那么就使用 On Completion 優(yōu)先級限制將任務(wù) 1 鏈接到任務(wù) 2。 |
![]() On Success(成功后) (綠色箭頭) |
如果您希望任務(wù) 2 處于等待狀態(tài),直至任務(wù) 1 成功完成,那么就使用 On Success 優(yōu)先級限制將任務(wù) 1 鏈接到任務(wù) 2。 |
![]() On Failure(失敗后) (紅色箭頭) |
如果您希望任務(wù) 2 僅在任務(wù) 1 無(wú)法成功執行時(shí)才開(kāi)始執行,那么就使用 On Failure 優(yōu)先級限制將任務(wù) 1 鏈接到任務(wù) 2。 |
下圖給出了具有 On Completion 優(yōu)先級限制的 ActiveX Script 任務(wù)和 Send Mail 任務(wù)。當 ActiveX Script 任務(wù)完成后(不論成功還是失?。?,Send Mail 任務(wù)都開(kāi)始運行。

圖3:具有 On Completion 優(yōu)先級限制的 ActiveX Script 任務(wù)和 Send Mail 任務(wù)
您可以配置不同的 Send Mail 任務(wù),一個(gè)用于 On Success 限制,另一個(gè)用于 On Failure 限制。這兩個(gè) Send Mail 任務(wù)可以根據 ActiveX Script 的成功或失敗來(lái)發(fā)送不同的郵件。

圖4:郵件任務(wù)
您也可以在一個(gè)任務(wù)上應用多個(gè)優(yōu)先級限制。例如, Send Mail 任務(wù)"Admin Notification"可以具有來(lái)自腳本#1的 On Success 限制和來(lái)自腳本#2 的 On Failure 限制。在這種情況下,DTS 認為其使用邏輯"AND"關(guān)系。因此為了發(fā)送 Admin Notification 郵件,腳本#1必須成功執行,而腳本#2 必須失敗。

圖5:同一任務(wù)多個(gè)優(yōu)先級限制的示例
連接:訪(fǎng)問(wèn)和移動(dòng)數據
為了成功地執行復制和轉換數據的 DTS 任務(wù),DTS 數據包必須與其來(lái)源和目標之間建立有效的連接,同樣需要連接到其他數據源(例如查詢(xún)表)
在創(chuàng )建數據包時(shí),您可以從有效 OLE DB 提供商和 ODBC 驅動(dòng)程序列表中選擇連接類(lèi)型,對連接進(jìn)行配置??捎玫倪B接類(lèi)型包括:
| ? |
Microsoft 數據訪(fǎng)問(wèn)組件(MDAC)驅動(dòng)程序
|
||||||||||
| ? |
Microsoft Jet 驅動(dòng)程序
|
||||||||||
| ? |
其他驅動(dòng)程序
|
DTS 允許您使用任何 OLE DB 連接。連接工具欄中的圖標為常用連接提供了方便的訪(fǎng)問(wèn)方式。
下圖介紹了一個(gè)具有兩個(gè)連接的數據包。數據被從一個(gè) Access 數據庫(來(lái)源連接)復制到 SQL Server 生產(chǎn)數據庫(目標連接)。
這個(gè)數據包的第一步是一個(gè)執行 SQL 任務(wù),該任務(wù)檢查是否已經(jīng)存在目標表。如果已經(jīng)存在,這個(gè)表將被刪除并重新創(chuàng )建。在成功的完成了執行 SQL 任務(wù)后,數據在第二步中被復制到 SQL Server 數據庫。如果復制操作失敗,則在第三步中發(fā)送一封電子郵件。
數據泵:轉換數據
DTS 數據泵是一個(gè) DTS 對象,用來(lái)驅動(dòng)數據的導入、導出和轉換。在轉換數據、數據驅動(dòng)的查詢(xún)以及平行數據泵任務(wù)中將使用這個(gè)數據泵。這些任務(wù)將在來(lái)源和目標連接中創(chuàng )建數據行組,然后創(chuàng )建數據泵實(shí)例,將數據行在來(lái)源和目標之間移動(dòng)。在數據行被復制時(shí),對每一行進(jìn)行數據轉換。
下圖的步驟 2 中,在 Access DB 任務(wù)和 SQL Production DB 任務(wù)之間使用了一個(gè)轉換數據任務(wù)。轉換數據任務(wù)是兩個(gè)連接之間的灰色箭頭。
為了定義從來(lái)源連接收集到的數據,您可以為這個(gè)轉換任務(wù)創(chuàng )建一個(gè)查詢(xún)。DTS 支持參數化的查詢(xún),允許您在查詢(xún)執行時(shí)定義查詢(xún)值。
您可以在該任務(wù)的屬性對話(huà)框中鍵入這個(gè)查詢(xún)?;蛘呤褂脭祿D換服務(wù)查詢(xún)設計器(Data Transformation Services Query Designer),該工具可以用來(lái)為 DTS 任務(wù)圖形化地創(chuàng )建查詢(xún)。下圖中,使用查詢(xún)設計器構建了一個(gè)將三個(gè)表加入到pubs數據庫中的查詢(xún)。
在轉換任務(wù)中,您也可以定義對數據做出的更改。下表解釋了 DTS 提供的內置轉換功能。
| 轉換 | 說(shuō)明 |
|
復制數據欄 |
用來(lái)直接將數據從來(lái)源復制到目標數據欄中,對數據不進(jìn)行任何轉換。 |
|
ActiveX 腳本 |
用來(lái)構建定制的轉換。請注意,由于轉換是逐行進(jìn)行的,因此ActiveX 腳本可能會(huì )影響 DTS 數據包的執行速度。 |
|
日期事件字符串 |
用來(lái)將來(lái)源數據欄中的日期或事件轉換為目標數據欄中不同的格式。 |
|
小寫(xiě)字母字符串 |
用來(lái)將來(lái)源數據欄中的小寫(xiě)字母轉換(如果需要)為目標數據欄的數據類(lèi)型。 |
|
大寫(xiě)字母字符串 |
用來(lái)將來(lái)源數據欄中的所有大寫(xiě)字母轉換(如果需要)為目標數據欄的數據類(lèi)型。 |
|
字符串中段 |
用來(lái)從來(lái)源數據欄中提取子字符串,將其轉換,然后將結果復制到目標數據欄中。 |
|
修剪字符串 |
用于刪除來(lái)源數據欄中字符串前、后和中間的空白,并將結果復制到目標數據欄中。 |
|
讀取文件 |
用來(lái)打開(kāi)來(lái)源數據欄中所指定的文件的內容,并將其內容復制到目標數據欄中。 |
|
寫(xiě)入文件 |
用來(lái)將來(lái)源數據欄(數據)的內容復制到文件中,該文件的路徑由第二個(gè)來(lái)源數據欄(文件名)指定。 |
您也可以通過(guò)編程創(chuàng )建自己的定制轉換。創(chuàng )建定制轉換的最快方法是使用活動(dòng)模板庫(Active Template Library,ATL)定制轉換模板,該模板包含在 SQL Server 2000 DTS 示例程序中。
SQL Server 2000中 擁有一種記錄轉換錯誤的新方法。您可以定義三種異常日志文件,用于數據包執行過(guò)程:錯誤文本文件、來(lái)源錯誤數據行文件以及目標錯誤數據行文件。
| ? |
常規錯誤信息被寫(xiě)入到錯誤文本文件中。 |
| ? |
如果轉換過(guò)程失敗,那么來(lái)源數據行將出現錯誤,并將該行寫(xiě)入到來(lái)源錯誤數據行文件中。 |
| ? |
如果插入過(guò)程失敗,那么目標數據行將出現錯誤,并將該行寫(xiě)入到目標錯誤數據行文件中。 |
異常日志文件被定義在轉換數據的任務(wù)中。每個(gè)轉換任務(wù)可以擁有它自己的日志文件。
數據泵階段
在默認情況下,數據泵只有一個(gè)階段:數據行轉換。這個(gè)階段就是您所配置的在轉換數據任務(wù)、數據驅動(dòng)的查詢(xún)任務(wù)以及平行數據泵任務(wù)中的數據欄轉換,而不選擇階段。
多數據泵階段功能是 SQL Server 2000 中所新增的。通過(guò)在 SQL Server Enterprise Manager 中選中多段數據泵選項,您可以在操作過(guò)程中的不同地方訪(fǎng)問(wèn)數據泵,添加功能。
在將一行數據從來(lái)源復制到目標時(shí),數據泵按照下圖所示的基本程序進(jìn)行操作。
在數據泵處理完最后一行數據后,任務(wù)完成,數據泵操作結束。
如果高級用戶(hù)需要在數據包中添加功能,使其支持任何數據泵階段,他可以這樣做:
| ? |
為每個(gè)定制的數據泵階段編寫(xiě)一個(gè)ActiveX腳本階段。如果您使用ActiveX腳本功能來(lái)定制數據泵階段,不需要任何數據包以外的代碼。 |
| ? |
在 Microsoft Visual C++ 中創(chuàng )建 COM 對象,定制所選中的數據泵階段。您在數據包以外開(kāi)發(fā)這個(gè)程序,轉換的每個(gè)所選中的階段都將調用這個(gè)程序。與訪(fǎng)問(wèn)數據泵階段的 ActieX 腳本方法不同的是,ActiveX 腳本方法為每個(gè)選中的階段使用不同的功能和入口點(diǎn),而這種方法提供了單一入口點(diǎn),由多個(gè)數據泵階段在任務(wù)執行過(guò)程中調用。 |
下列選項可以保存 DTS 數據包:
| ? |
Microsoft SQL Server 如果您希望在任何網(wǎng)絡(luò )中的 SQL Server 實(shí)例中保存數據包,請將您的 DTS 數據包保存在 Microsoft SQL Server 上,并保留這些數據包的清單,在數據包開(kāi)發(fā)過(guò)程中添加和刪除數據包版本。 |
| ? |
SQL Server 2000 元數據服務(wù) 如果您計劃跟蹤數據包版本、元數據和數據血統信息,請將 DTS 數據包保存在元數據服務(wù)上。 |
| ? |
結構化的存儲文件 如果您需要在網(wǎng)絡(luò )中復制、移動(dòng)和發(fā)送數據包,而不想把數據包存儲到 Microsoft SQL Server 數據庫中,請將 DTS 數據包保存為結構化的存儲文件。 |
| ? |
Microsoft Visual Basic 如果您希望將其集成到 Visual Basic 程序中,或作為 DTS 應用程序開(kāi)發(fā)的原型,請將由 DTS Designer 和 DTS 導入/導出向導創(chuàng )建的 DTS 數據包保存為 Microsoft Visual Basic 文件。 |
DTS Designer 提供了多種數據移動(dòng)任務(wù)的解決方案。DTS 通過(guò)提供對 DTS 對象模型的程序化訪(fǎng)問(wèn),擴展了許多可用的解決方案。使用Microsoft Visual Basic、Microsoft Visual C++ 或其他支持 COM 的應用程序開(kāi)發(fā)系統 ,您可以為您的環(huán)境開(kāi)發(fā)一個(gè)定制的 DTS 解決方案,使用圖形工具中所不支持的功能。
DTS 以多種不同的方式為開(kāi)發(fā)人員提供支持:
| ? |
構建數據包 您可以開(kāi)發(fā)極其復雜的數據包,訪(fǎng)問(wèn)對象模型中的所有功能,而不需要使用 DTS Designer 或 DTS 導入/導出向導。 |
| ? |
擴展數據包 您可以通過(guò)定制的任務(wù)和轉換來(lái)增加新的功能,這些任務(wù)和轉換是專(zhuān)門(mén)為您的業(yè)務(wù)定制的,并且能在DTS中重復使用。 |
| ? |
執行數據包 DTS 數據包的執行不需要基于任何所提供的工具,可以通過(guò) COM 事件通過(guò)編程執行 DTS 數據包和顯示過(guò)程,允許構建嵌入式或定制的 DTS 執行環(huán)境。 |
所提供的 DTS 程序示例能夠幫助您了解 DTS 編程。這些示例與 SQL Server 2000 一同安裝。
如果您要開(kāi)發(fā) DTS 應用程序,那么您可以重新分配 DTS 文件。更多信息,請參考 SQL Server 2000 光盤(pán)的 Redist.txt 文件。
Microsoft SQL Server 2000 Books Online中擁有許多有關(guān) DTS、使用DTS應用程序以及構建定制解決方案的信息。其他信息,請參考下列資源:
| ? |
Microsoft SQL Server Web站點(diǎn),地址為http://www.microsoft.com/china/sql/。 |
| ? |
Microsoft SQL Server Developer Center,地址為http://msdn.microsoft.com/library/default.asp?URL=/sqlserver/。 |
| ? |
SQL Server Magazine,地址為http://www.sqlmag.com/ [英文]。 |
| ? |
Microsoft.public.sqlserver.server和 microsoft.public.sqlserver.datawarehouse新聞組,地址為 news://news.microsoft.com。 |
| ? |
關(guān)于SQL Server的微軟官方課程(Microsoft Official Curriculum)。如需了解最新的課程信息,請訪(fǎng)問(wèn)Microsoft Training and Services Web站點(diǎn),地址為http://www.microsoft.com/traincert/default.asp [英文] |
聯(lián)系客服