SQL Server 2000中的数据转换服务 (DTS)
SQL Server 2000中的數據轉換服務 (DTS)
更新日期: 2004年06月15日 發布者 Diane LarsenEuan Garden, 投稿人
Microsoft Corporation
2000 年 9 月
摘要: 為了完成數據合并、存檔和分析等任務;為了進行應用程序開發;為了進行數據庫或服務器升級,數據庫管理員經常需要導入、導出以及轉換數據。SQL Server 2000 中的數據轉換服務(DTS)為此提供了一組圖形化工具和可編程對象,能夠幫助管理員和開發人員解決從不同來源到單個或多個目標的數據轉移問題,包括數據提取、轉換以及合并。您可以將任務、工作流操作和限制條件組成 DTS數據包,然后安排定期或在特定事件發生時執行該數據包。本白皮書將介紹 DTS,給出一些能夠用于創建 DTS 解決方案的組件和服務,介紹如何使用 DTS Designer 來實施 DTS 解決方案,最后將介紹 DTS 應用程序開發。
本頁內容
| DTS 簡介 | |
| 使用 DTS Designer | |
| 保存 DTS 數據包的選項 | |
| 將 DTS 作為應用程序開發平臺 |
DTS 簡介
大部分公司的數據都具有多種存儲格式和存儲位置。為了支持決策制定、提高系統性能或升級現有系統,經常必須將數據從一個數據存儲位置轉移到另一個位置。
Microsoft SQL Server 2000 數據轉換服務(DTS)為此提供了一系列的工具,您可以用來從不同來源將數據提取、轉換和合并到單個或多個目標。通過使用DTS工具,您可以根據公司的特殊需求創建定制的數據移動解決方案,正如下面這些情形:
| ? | 您已經在早期版本的 SQL Server 或其他平臺(例如 Microsoft Access)上部署了一個數據庫應用程序。現在,新版本的應用程序需要 SQL Server 2000,而且需要更改數據庫架構,并轉換部分數據類型。 |
| ? | 為了復制和轉換數據,可以構建一個 DTS 解決方案,將數據庫對象從原始數據源復制到 SQL Server 2000 數據庫中,同時重新設置數據欄并更改數據類型。您可以使用 DTS 工具來運行這個解決方案,或者將這個解決方案嵌入到您的應用程序中。 |
| ? | 您必須將一些關鍵的 Microsoft Excel 電子表格合并到 SQL Server 數據庫中。很多部門在每月底創建電子表格,但是沒有設置日程安排來完成所有的電子表格。 |
| ? | 為了合并電子表格數據,您可以構建一個 DTS 解決方案,使其在消息被發送到消息隊列時執行。這個消息將觸發 DTS,使其從電子表格中提取數據,執行各種定義的轉換,然后將數據裝載到 SQL Server 數據庫中。 |
| ? | 您的數據倉庫中保存了有關業務操作的歷史數據,您要使用 Microsoft SQL Server 2000 分析服務來匯總這些數據。這個數據倉庫需要每天夜間從聯機事務處理(OLTP)數據庫進行更新。而您的 OLTP 系統一天 24 小時都在使用中,其性能十分關鍵。 您可以構建一個 DTS 解決方案,使用文件傳輸協議(FTP)將數據文件移動到本地驅動器中,將數據裝載到事實表中,然后使用分析服務對數據進行統計。您可以安排這個 DTS 解決方案每天夜間執行,也可以使用新的 DTS 日志選項來跟蹤這個過程所用的時間,使您能夠分析性能隨時間的變化。 |
DTS 是什么?
DTS 是一組數據轉換工具,您可以用來在一個或多個數據源(例如 Microsoft SQL Server、 Microsoft Excel 或 Microsoft Access)之間進行不同類型數據的導入、導出和轉換。其中的連通性通過數據訪問的開放式標準-OLE DB-來提供。ODBC(開放式數據庫連接)數據源由 OLE DB Provider for ODBC 來支持。
您可以將 DTS 解決方案創建為一個或多個數據包。每個數據包中可以包含一組有序的任務,定義所要執行的工作,也可以包含數據和對象的轉換、定義任務執行的工作流限制以及數據源和目標的連接等。DTS 數據包也提供記錄數據包執行細節、控制事務以及處理全局變量等服務。
下列工具可以用于創建和執行 DTS 數據包:
| ? | 導入/導出向導(Import/Export Wizard)用于構建相對簡單的 DTS 數據包,支持數據遷移和簡單轉換。 |
| ? | DTS Designer 圖形化地實施 DTS 對象模型,允許您創建具有大量功能的 DTS 數據包。 |
| ? | DTSRun是一個命令提示符實用程序,用來執行已有的 DTS 數據包。 |
| ? | DTSRunUI 是DTSRun的圖形化界面, 也允許傳遞全局變量和生成命令行。 |
| ? | SQLAgent 不是一個 DTS 應用程序;但是 DTS 可以用它來安排數據包的執行。 |
您也可以使用 DTS 對象模型通過編程創建和運行數據包,構建定制任務以及構建定制轉換。
DTS 中的新內容?
Microsoft SQL Server 2000 引入了許多 DTS 增強和新特性:
| ? | 新的 DTS 任務包括 FTP 任務、執行數據包任務、動態屬性任務以及消息隊列任務。 |
| ? | 增強的日志功能記錄了每個數據包執行的信息,允許您擁有完整的執行歷史,并能查看任務中每個步驟的信息。您可以生成異常文件,包含可能由于錯誤而沒有執行的數據行。 |
| ? | 您可以將 DTS 數據包保存為 Microsoft Visual Basic 文件。 |
| ? | 新的多段數據泵允許高級用戶在不同階段定制數據轉換操作。同時,也可以使用全局變量作為查詢的輸入參數。 |
| ? | 您可以在 DTS 轉換任務和執行 SQL 任務中使用參數化的源查詢。 |
| ? | 您可以使用執行數據包任務,動態地將全局變量的取值從父數據包分配到子數據包。 |
使用 DTS Designer
DTS Designer 圖形化地實施 DTS 對象模型,允許您圖形化地創建 DTS 數據包。您可以使用 DTS Designer 來:
| ? | 創建包含一個或多個步驟的簡單數據包。 |
| ? | 創建包含復雜工作流的數據包,這些工作流中可包含使用有條件邏輯的多步操作、事件驅動的代碼或多個數據源的連接。 |
| ? | 編輯已有的數據包。 |
DTS Designer 界面由工作區域、工具欄和菜單組成。其中工作區域用于構建數據包,工具欄包含有數據包元素,您可以將它們拖動到設計頁中,菜單中包含有工作流和數據包管理命令。
圖1:DTS Designer 界面
查看大圖。
在 DTS Designer 中,您可以將連接和任務拖動到設計頁中,并指定工作流執行的順序,從而輕松地創建功能強大的 DTS 數據包。下面的內容將定義任務、工作流、連接和轉換,并介紹如何使用 DTS Designer 輕松地實施 DTS 解決方案。
任務:定義數據包中的步驟
DTS 數據包中通常包含一個或多個步驟。每個任務定義了一個可能在數據包執行過程中執行的工作項目。您可以使用任務來:
| ? | 轉換數據
| |||||||||||||||||||||||||||
| ? | 復制和管理數據
| |||||||||||||||||||||||||||
| ? | 從數據包中將任務作為作業運行
|
1 SQL Server 2000中新增。
2 僅適用于已安裝 SQL Server 2000 分析服務的情形。
您可以程序化地創建定制任務,然后使用 Register Custom Task(注冊定制任務)命令將它們集成到 DTS Designer 中。
為了說明這些任務的使用,在這里我們給出了一個包含兩個任務的簡單 DTS 數據包: Microsoft ActiveX Script 任務和 Send Mail 任務:
圖2:具有兩個任務的 DTS 數據包
ActiveX Script 任務可以駐留任何 ActiveX 腳本引擎,包括 Microsoft Visual Basic Scripting Edition (VBScript)、Microsoft JScript 或者 ActiveState ActivePerl(您可以從http://www.activestate.com/下載)。 Send Mail 任務可以發送消息,指出該數據包已經運行。請注意,這些任務是沒有順序的。在執行數據包時,ActiveX Script 任務和 Send Mail 任務同時運行。
工作流:設置任務優先級
當您在定義一組任務時,通常任務的執行是應該有一定順序的。如果這些任務擁有一定的順序,那么每個任務將稱為一個過程中的一個步驟。在 DTS Designer 中,您可以在 DTS Designer 設計頁中對任務進行操作,使用優先級限制來控制任務執行的順序。
優先級限制將數據包中的任務依次鏈接起來。下表給出了您可以在 DTS 中使用的優先級限制的類型。
| 優先級限制 | 說明 |
|
| 如果您希望任務 2 處于等待狀態,直至任務 1 完成(無論結果如何),那么就使用 On Completion 優先級限制將任務 1 鏈接到任務 2。 |
|
| 如果您希望任務 2 處于等待狀態,直至任務 1 成功完成,那么就使用 On Success 優先級限制將任務 1 鏈接到任務 2。 |
|
| 如果您希望任務 2 僅在任務 1 無法成功執行時才開始執行,那么就使用 On Failure 優先級限制將任務 1 鏈接到任務 2。 |
下圖給出了具有 On Completion 優先級限制的 ActiveX Script 任務和 Send Mail 任務。當 ActiveX Script 任務完成后(不論成功還是失敗),Send Mail 任務都開始運行。
圖3:具有 On Completion 優先級限制的 ActiveX Script 任務和 Send Mail 任務
您可以配置不同的 Send Mail 任務,一個用于 On Success 限制,另一個用于 On Failure 限制。這兩個 Send Mail 任務可以根據 ActiveX Script 的成功或失敗來發送不同的郵件。
圖4:郵件任務
您也可以在一個任務上應用多個優先級限制。例如, Send Mail 任務"Admin Notification"可以具有來自腳本#1的 On Success 限制和來自腳本#2 的 On Failure 限制。在這種情況下,DTS 認為其使用邏輯"AND"關系。因此為了發送 Admin Notification 郵件,腳本#1必須成功執行,而腳本#2 必須失敗。
圖5:同一任務多個優先級限制的示例
連接:訪問和移動數據
為了成功地執行復制和轉換數據的 DTS 任務,DTS 數據包必須與其來源和目標之間建立有效的連接,同樣需要連接到其他數據源(例如查詢表)
在創建數據包時,您可以從有效 OLE DB 提供商和 ODBC 驅動程序列表中選擇連接類型,對連接進行配置。可用的連接類型包括:
| ? | Microsoft 數據訪問組件(MDAC)驅動程序
| ||||||||||
| ? | Microsoft Jet 驅動程序
| ||||||||||
| ? | 其他驅動程序
|
DTS 允許您使用任何 OLE DB 連接。連接工具欄中的圖標為常用連接提供了方便的訪問方式。
下圖介紹了一個具有兩個連接的數據包。數據被從一個 Access 數據庫(來源連接)復制到 SQL Server 生產數據庫(目標連接)。
圖6:具有兩個連接的數據包示例
查看大圖。
這個數據包的第一步是一個執行 SQL 任務,該任務檢查是否已經存在目標表。如果已經存在,這個表將被刪除并重新創建。在成功的完成了執行 SQL 任務后,數據在第二步中被復制到 SQL Server 數據庫。如果復制操作失敗,則在第三步中發送一封電子郵件。
數據泵:轉換數據
DTS 數據泵是一個 DTS 對象,用來驅動數據的導入、導出和轉換。在轉換數據、數據驅動的查詢以及平行數據泵任務中將使用這個數據泵。這些任務將在來源和目標連接中創建數據行組,然后創建數據泵實例,將數據行在來源和目標之間移動。在數據行被復制時,對每一行進行數據轉換。
下圖的步驟 2 中,在 Access DB 任務和 SQL Production DB 任務之間使用了一個轉換數據任務。轉換數據任務是兩個連接之間的灰色箭頭。
圖7:轉換數據任務的示例
查看大圖。
為了定義從來源連接收集到的數據,您可以為這個轉換任務創建一個查詢。DTS 支持參數化的查詢,允許您在查詢執行時定義查詢值。
您可以在該任務的屬性對話框中鍵入這個查詢。或者使用數據轉換服務查詢設計器(Data Transformation Services Query Designer),該工具可以用來為 DTS 任務圖形化地創建查詢。下圖中,使用查詢設計器構建了一個將三個表加入到pubs數據庫中的查詢。
圖8:數據轉換服務查詢設計器界面
查看大圖。
在轉換任務中,您也可以定義對數據做出的更改。下表解釋了 DTS 提供的內置轉換功能。
| 轉換 | 說明 |
| 復制數據欄 | 用來直接將數據從來源復制到目標數據欄中,對數據不進行任何轉換。 |
| ActiveX 腳本 | 用來構建定制的轉換。請注意,由于轉換是逐行進行的,因此ActiveX 腳本可能會影響 DTS 數據包的執行速度。 |
| 日期事件字符串 | 用來將來源數據欄中的日期或事件轉換為目標數據欄中不同的格式。 |
| 小寫字母字符串 | 用來將來源數據欄中的小寫字母轉換(如果需要)為目標數據欄的數據類型。 |
| 大寫字母字符串 | 用來將來源數據欄中的所有大寫字母轉換(如果需要)為目標數據欄的數據類型。 |
| 字符串中段 | 用來從來源數據欄中提取子字符串,將其轉換,然后將結果復制到目標數據欄中。 |
| 修剪字符串 | 用于刪除來源數據欄中字符串前、后和中間的空白,并將結果復制到目標數據欄中。 |
| 讀取文件 | 用來打開來源數據欄中所指定的文件的內容,并將其內容復制到目標數據欄中。 |
| 寫入文件 | 用來將來源數據欄(數據)的內容復制到文件中,該文件的路徑由第二個來源數據欄(文件名)指定。 |
您也可以通過編程創建自己的定制轉換。創建定制轉換的最快方法是使用活動模板庫(Active Template Library,ATL)定制轉換模板,該模板包含在 SQL Server 2000 DTS 示例程序中。
數據泵錯誤日志
SQL Server 2000中 擁有一種記錄轉換錯誤的新方法。您可以定義三種異常日志文件,用于數據包執行過程:錯誤文本文件、來源錯誤數據行文件以及目標錯誤數據行文件。
| ? | 常規錯誤信息被寫入到錯誤文本文件中。 |
| ? | 如果轉換過程失敗,那么來源數據行將出現錯誤,并將該行寫入到來源錯誤數據行文件中。 |
| ? | 如果插入過程失敗,那么目標數據行將出現錯誤,并將該行寫入到目標錯誤數據行文件中。 |
異常日志文件被定義在轉換數據的任務中。每個轉換任務可以擁有它自己的日志文件。
數據泵階段
在默認情況下,數據泵只有一個階段:數據行轉換。這個階段就是您所配置的在轉換數據任務、數據驅動的查詢任務以及平行數據泵任務中的數據欄轉換,而不選擇階段。
多數據泵階段功能是 SQL Server 2000 中所新增的。通過在 SQL Server Enterprise Manager 中選中多段數據泵選項,您可以在操作過程中的不同地方訪問數據泵,添加功能。
在將一行數據從來源復制到目標時,數據泵按照下圖所示的基本程序進行操作。
圖9:數據泵過程
查看大圖。
在數據泵處理完最后一行數據后,任務完成,數據泵操作結束。
如果高級用戶需要在數據包中添加功能,使其支持任何數據泵階段,他可以這樣做:
| ? | 為每個定制的數據泵階段編寫一個ActiveX腳本階段。如果您使用ActiveX腳本功能來定制數據泵階段,不需要任何數據包以外的代碼。 |
| ? | 在 Microsoft Visual C++ 中創建 COM 對象,定制所選中的數據泵階段。您在數據包以外開發這個程序,轉換的每個所選中的階段都將調用這個程序。與訪問數據泵階段的 ActieX 腳本方法不同的是,ActiveX 腳本方法為每個選中的階段使用不同的功能和入口點,而這種方法提供了單一入口點,由多個數據泵階段在任務執行過程中調用。 |
保存 DTS 數據包的選項
下列選項可以保存 DTS 數據包:
| ? | Microsoft SQL Server 如果您希望在任何網絡中的 SQL Server 實例中保存數據包,請將您的 DTS 數據包保存在 Microsoft SQL Server 上,并保留這些數據包的清單,在數據包開發過程中添加和刪除數據包版本。 |
| ? | SQL Server 2000 元數據服務 如果您計劃跟蹤數據包版本、元數據和數據血統信息,請將 DTS 數據包保存在元數據服務上。 |
| ? | 結構化的存儲文件 如果您需要在網絡中復制、移動和發送數據包,而不想把數據包存儲到 Microsoft SQL Server 數據庫中,請將 DTS 數據包保存為結構化的存儲文件。 |
| ? | Microsoft Visual Basic 如果您希望將其集成到 Visual Basic 程序中,或作為 DTS 應用程序開發的原型,請將由 DTS Designer 和 DTS 導入/導出向導創建的 DTS 數據包保存為 Microsoft Visual Basic 文件。 |
將 DTS 作為應用程序開發平臺
DTS Designer 提供了多種數據移動任務的解決方案。DTS 通過提供對 DTS 對象模型的程序化訪問,擴展了許多可用的解決方案。使用Microsoft Visual Basic、Microsoft Visual C++ 或其他支持 COM 的應用程序開發系統 ,您可以為您的環境開發一個定制的 DTS 解決方案,使用圖形工具中所不支持的功能。
DTS 以多種不同的方式為開發人員提供支持:
| ? | 構建數據包 您可以開發極其復雜的數據包,訪問對象模型中的所有功能,而不需要使用 DTS Designer 或 DTS 導入/導出向導。 |
| ? | 擴展數據包 您可以通過定制的任務和轉換來增加新的功能,這些任務和轉換是專門為您的業務定制的,并且能在DTS中重復使用。 |
| ? | 執行數據包 DTS 數據包的執行不需要基于任何所提供的工具,可以通過 COM 事件通過編程執行 DTS 數據包和顯示過程,允許構建嵌入式或定制的 DTS 執行環境。 |
所提供的 DTS 程序示例能夠幫助您了解 DTS 編程。這些示例與 SQL Server 2000 一同安裝。
如果您要開發 DTS 應用程序,那么您可以重新分配 DTS 文件。更多信息,請參考 SQL Server 2000 光盤的 Redist.txt 文件。
轉載于:https://www.cnblogs.com/yzdbs/articles/1459979.html
總結
以上是生活随笔為你收集整理的SQL Server 2000中的数据转换服务 (DTS)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何安装Bodymovin插件
- 下一篇: (转)mysql 字符串 拼接 截取 替