Microsoft SQL Server 2000 中的数据转换服务 (DTS)
摘自:http://www.microsoft.com/china/MSDN/library/data/sqlserver/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx?mfr=true
Microsoft SQL Server 2000 中的數據轉換服務 (DTS)
發布日期: 4/1/2004 | 更新日期: 4/1/2004作者:Diane Larsen
投稿人:Euan Garden
Microsoft Corporation
2000 年 9 月
摘要:為了支持一些任務(例如數據合并、存檔和分析)、進行應用程序開發以及數據庫或服務器更新,數據庫管理員經常會導入、導出和轉換數據。SQL Server 2000 中的數據轉換服務 (DTS) 提供了一組圖形化工具和可編程對象,以幫助管理員和開發人員解決數據移動問題,包括從不同的源到一個或多個目標的數據提取、轉換和合并。任務、工作流操作和約束的集合可以收集為 DTS 包,此包可以計劃為定期運行或在發生某些事件時運行。本白皮書對 DTS 進行了介紹,顯示了一些可用于創建 DTS 解決方案的組件和服務,闡釋了如何使用 DTS 設計器實現 DTS 解決方案,并介紹了 DTS 應用程序開發。
本頁內容
| DTS 簡介 | |
| DTS 是什么? | |
| DTS 的新增功能 | |
| 使用 DTS 設計器 | |
| 任務:包中的定義步驟 | |
| 工作流:設置任務優先順序 | |
| 連接:訪問和移動數據 | |
| 數據抽取:轉換數據 | |
| 保存 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 Analysis Service 匯總這些數據。您的數據倉庫需要每晚從聯機事務處理 (OLTP) 數據庫進行更新。您的 OLTP 系統一天 24 小時運行,性能要求很嚴格。 可以生成一個 DTS 解決方案,此解決方案使用文件傳輸協議 (FTP) 將數據文件移動到本地驅動器上,將數據加載到事實數據表中,然后使用 Analysis Service 聚合這些數據。可以將這個 DTS 解決方案計劃為每晚運行,還可以使用新的 DTS 日志記錄選項跟蹤此過程占用的時間,以便于您隨著時間的推移對性能進行分析。 |
DTS 是什么?
DTS 是一組可用來在一個或多個數據源(如 Microsoft SQL Server、Microsoft Excel 或 Microsoft Access)之間導入、導出和轉換異類數據的工具。連接是通過 OLE DB(一種數據訪問開放標準)提供的。ODBC(開放式數據庫連接)數據源則是通過用于 ODBC 的 OLE DB 提供程序支持的。
可以將 DTS 解決方案創建為一個或多個包。每個包都可能包含一組用來定義要執行工作的經過組織的任務、對數據和對象的轉換、用來定義任務執行的工作流約束以及與數據源和目標的連接。DTS 包還提供了一些服務,例如記錄包執行詳細信息、控制事務和處理全局變量。
下面的這些工具可用于創建和執行 DTS 包:
| ? | “導入/導出向導”用于生成相對簡單的 DTS 包,并支持數據遷移和簡單轉換。 |
| ? | DTS 設計器以圖形化的形式實現 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 設計器
DTS 設計器以圖形的形式實現 DTS 對象模型,使您可以圖形化創建 DTS 包。可以使用 DTS 設計器進行下列操作:
| ? | 創建包含一個或多個步驟的簡單包。 |
| ? | 創建包含復雜工作流(此工作流包括使用條件邏輯的多個步驟)、事件驅動代碼或到數據源的多個連接的包。 |
| ? | 編輯現有的包。 |
DTS 設計器界面由用于生成包的工作區、包含包元素的工具欄(這些包元素可拖動到設計表上),以及包含工作流和包管理命令的菜單組成。
圖 1. DTS 設計器界面
通過將連接和任務拖動到設計表上,以及利用工作流指定執行順序,可以使用 DTS 設計器輕松地生成功能強大的 DTS 包。下面幾節內容定義了任務、工作流、連接和轉換,并闡釋了使用 DTS 設計器實現 DTS 解決方案的方便之處。
返回頁首任務:包中的定義步驟
DTS 包通常包括一個或多個任務。每個任務都定義一個可在包執行過程中執行的工作項目。可以使用任務執行下列操作:
| ? | 轉換數據
“并行數據抽取”任務1“并行數據抽取”任務只能以編程方式使用,它除了執行與“轉換數據”和“數據驅動查詢”任務相同的功能外,還支持按照 OLE DB 2.5 及更高版本定義的方式劃分的行集。 | ||||||||||||||||||||||||
| ? | 復制和管理數據
| ||||||||||||||||||||||||
| ? | 將包中的任務作為作業運行
|
1 SQL Server 2000 中的新增功能。
2 2 只有安裝了 SQL Server 2000 分析服務的情況下才可用。
您還可以通過編程方式創建自定義任務,然后使用“注冊自定義任務”命令將它們集成到 DTS 設計器中。
為了闡釋這些任務的使用,這里有一個簡單的 DTS 包,其中具有下列兩個任務:“Microsoft ActiveX? 腳本”任務和“發送郵件”任務:
圖 2. 具有兩個任務的 DTS 包
“ActiveX 腳本”任務可以承載任何“ActiveX 腳本”引擎,其中包括 Microsoft Visual Basic Scripting Edition (VBScript)、Microsoft JScript? 或 ActiveState ActivePerl,這些引擎可從 http://www.activestate.com 下載。“發送郵件”任務可以發送一條表明包已經運行的消息。請注意,這些任務沒有順序。當包執行時,“ActiveX 腳本”任務和“發送郵件”任務會同時運行。
返回頁首工作流:設置任務優先順序
定義一組任務時,這些任務通常應該按照某種順序執行。當任務按順序執行時,每個任務就成為了過程中的一個步驟。在 DTS 設計器中,可以在 DTS 設計器設計表中操作任務,并使用優先約束控制任務的執行順序。
優先約束按順序鏈接包中的任務。下表顯示了可以在 DTS 中使用的優先約束的類型。
| 優先約束 | 說明 |
| 完成時(藍色箭頭) | 如果想讓任務 2 等待任務 1 完成(無論結果如何),則可以使用“完成時”優先約束將任務 1 鏈接到任務 2。 |
| 成功時(綠色箭頭) | 如果想讓任務 2 等待任務 1 成功完成,則可以使用“成功時”優先約束將任務 1 鏈接到任務 2。 |
| 成功時(綠色箭頭) | 如果想讓任務 2 只在任務 1 無法成功執行時開始執行,則可以使用“失敗時”優先約束將任務 1 鏈接到任務 2。 |
下圖顯示了帶有“完成時”優先約束的“ActiveX 腳本”任務和“發送郵件”任務。當“Active X 腳本”任務完成(無論成功或失敗)時,“發送郵件”任務運行。
圖 3. 帶有“完成時”優先約束的“ActiveX 腳本”任務和“發送郵件”任務
可以配置兩個單獨的“發送郵件”任務,一個用于“成功時”約束,另一個用于“失敗時”約束。這兩個“發送郵件”任務可以根據 ActiveX 腳本的成功或失敗發送不同的消息。
圖 4. 郵件任務
您還可以對一個任務發出多個優先約束。例如,“發送郵件”任務“管理通知”可以同時具有來自腳本 #1 的“成功時”約束和來自腳本 #2 的“失敗時”約束。在這些情況下,DTS 采用邏輯“與”關系。因此,要使得“管理通知”消息能夠得以發送,腳本 #1 必須成功執行,而腳本 #2 必須失敗。
圖 5. 一個任務上多個優先約束的示例
返回頁首連接:訪問和移動數據
要成功執行復制并轉換數據的 DTS 任務,DTS 包必須建立與其源數據和目標數據,以及與任何其他數據源(如查找表)的有效連接。創建包時,可通過從可用 OLE DB 提供程序和 ODBC 驅動程序列表選擇連接類型來配置連接。可用的連接類型有:
| ? | Microsoft 數據訪問組件 (MDAC) 驅動程序 用于 SQL Server 的 Microsoft OLE DB 提供程序 Microsoft 數據鏈接 用于 Oracle 的 Microsoft ODBC 驅動程序 |
| ? | Microsoft Jet 驅動程序 dBase 5 Microsoft Access HTML 文件(源) Microsoft Excel 97-2000 Paradox 5.X |
| ? | 其他驅動程序 文本文件(源) 文本文件(目標) 其他連接 |
DTS 允許您使用任何 OLE DB 連接。“連接”工具欄上的圖標提供了對常用連接的便捷訪問。下圖顯示了一個具有兩個連接的包。數據正從 Access 數據庫(源連接)復制到 SQL Server 產品數據庫(目標連接)。
圖 6. 具有兩個連接的包的示例
此包中的第一步是“執行 SQL”任務,此任務會查看目標表是否已存在。如果存在,則會除去并重新創建目標表。如果“執行 SQL”任務成功,則會在步驟 2 中將數據復制到 SQL Server 數據庫。如果復制操作失敗,則會在步驟 3 中發送一個電子郵件。
返回頁首數據抽取:轉換數據
DTS 數據抽取是用來驅動數據的導入、導出和轉換的 DTS 對象。將在“轉換數據”、“數據驅動查詢”和“并行數據抽取”任務的執行過程中使用數據抽取。這些任務是通過下列操作完成的:對源和目標連接創建行集,然后創建數據抽取的一個實例以在源和目標之間移動行。對于每行的轉換在復制該行時進行。
在下圖的步驟 2 中,Access 數據庫任務和 SQL 產品數據庫任務之間使用了“傳輸數據”任務。“傳輸數據”任務是兩個連接之間的灰色箭頭。
圖 7.“傳輸數據”任務的示例
要定義從源連接收集的數據,可以為傳輸任務生成一個查詢。DTS 支持參數化的查詢,使您可以在執行查詢時定義查詢值。
您可以在任務的屬性對話框中鍵入查詢,也可以使用“數據轉換服務查詢設計器”,“數據轉換服務查詢設計器”是一個用于以圖形方式為 DTS 任務生成查詢的工具。在下圖中,使用“查詢設計器”生成了一個聯接 pubs 數據庫中三個表的查詢。
圖 8.“數據轉換服務查詢設計器”界面(單擊可以放大)
在轉換任務中,還可以定義對數據的任何更改。下表描述了 DTS 提供的內置轉換。
| 轉換 | 說明 |
| 復制列 | 用來將數據直接從源列復制到目標列,而不對數據應用任何轉換。 |
| ActiveX 腳本 | 用來生成自定義轉換。請注意,由于轉換是以逐行為基礎發生的,所以 ActiveX 腳本可能會影響 DTS 包的執行速度。 |
| Datetime 字符串 | 用來將源列中的日期或時間轉換為目標列中的其他格式。 |
| 小寫字符串 | 用來將源列轉換為小寫字符,如果需要,則轉換為目標數據類型。 |
| 大寫字符串 | 用來將源列轉換為全部大寫字符,如果需要,則轉換為目標數據類型。 |
| 字符串中間部分 | 用來從源列提取子字符串,對其進行轉換,然后將結果復制到目標列。 |
| 剪裁字符串 | 用來從源列中的字符串刪除起始空格、尾隨空格和嵌入空格,并將結果復制到目標列。 |
| 讀取文件 | 用來打開某一文件(其名稱在源列中指定)的內容,并將這些內容復制到目標列。 |
| 寫入文件 | 用來將源列(數據列)的內容復制到第二個源列(文件名列)指定其路徑的某個文件中。 |
您還可以以編程方式創建自己的自定義轉換。生成自定義轉換的最快方法是使用活動模板庫 (ATL) 自定義轉換模板,該模板包括在 SQL Server 2000 DTS 示例程序中。
數據抽取錯誤日志記錄
在 SQL Server 2000 中可以使用一種記錄轉換錯誤的新方法。您可以定義可在包執行過程中使用的三個異常日志文件:錯誤文本文件、源錯誤行文件和目標錯誤行文件。
| ? | 一般錯誤信息會寫入錯誤文本文件。 |
| ? | 如果轉換失敗,則源行有錯誤,該行會寫入到源錯誤行文件。 |
| ? | 如果插入失敗,則目標行有錯誤,該行會寫入到目標錯誤行文件。 |
執行日志文件是在轉換數據的任務中定義的。每個轉換任務都有其自己的日志文件。
數據抽取階段
默認情況下,數據抽取有一個階段:行轉換。此階段是您在“轉換數據”任務、“數據驅動查詢”任務和“并行數據抽取”任務中映射列級轉換而沒有選擇階段時,進行配置的階段。
現在 SQL Server 2000 中新增了多個數據抽取階段。通過在 SQL Server 企業管理器中選擇多階段數據抽取選項,可以在數據抽取操作過程中的幾個點訪問數據抽取,還可以添加功能。
將一行數據從源復制到目標時,數據抽取遵循下圖中顯示的基本過程。
圖 9. 數據抽取過程(單擊可以放大)
數據抽取處理了最后一行數據后,任務完成,數據抽取操作終止。
想要向包添加功能以便它支持任何數據抽取階段的高級用戶,可以通過執行下列操作完成此目標:
| ? | 為要自定義的每個數據抽取階段編寫一個 ActiveX 腳本階段函數。如果使用 ActiveX 腳本函數來自定義數據抽取階段,就不需要包之外的任何其他代碼了。 |
| ? | 在 Microsoft Visual C++? 中創建 COM 對象,以自定義選定的數據抽取階段。開發不屬于此包的程序,并對于轉換的每個選定階段調用此程序。此方法與訪問數據抽取階段的 ActiveX 腳本方法不同,它提供了在數據抽取任務執行時由多個數據抽取階段調用的一個入口點,而后者則對每個選定階段使用不同的函數和入口點。 |
保存 DTS 包的選項
下列這些選項可用于保存 DTS 包:
| ? | Microsoft SQL Server 如果想在網絡上的任何 SQL Server 實例上存儲包、保留這些包的方便清單,并且想在包開發過程中添加和刪除包版本,則請將您的 DTS 包保存到 Microsoft SQL Server。 |
| ? | SQL Server 2000 Meta Data Services 如果計劃跟蹤包版本、元數據和數據沿襲信息,則請將您的 DTS 包保存到 Meta Data Services。 |
| ? | 結構化存儲文件 如果想通過網絡復制、移動和發送包,則請將您的 DTS 包保存到結構化存儲文件,而不必將該包存儲在 Microsoft SQL Server 數據庫中。 |
| ? | Microsoft Visual Basic 如果想將 DTS 設計器或 DTS 導入/導出向導創建的 DTS 包集成到 Visual Basic 程序中,或將它用作 DTS 應用程序開發的原型,則請將該包保存到 Microsoft Visual Basic 文件。 |
將 DTS 作為應用程序開發平臺
DTS 設計器為數據移動任務提供了廣泛的解決方案。通過提供對 DTS 對象模型的編程化訪問,DTS 擴展了可用解決方案的數量。通過使用 Microsoft Visual Basic、Microsoft Visual C++ 或任何支持 COM 的其他應用程序開發系統,您可以使用圖形化工具中不支持的功能為您的環境開發自定義的 DTS 解決方案。
DTS 以下列幾種不同的方法為開發人員提供支持:
| ? | 生成包 您可以在對象模型中開發非常復雜的包并訪問所有的功能,而不用使用 DTS 設計器或 DTS 導入/導出向導。 |
| ? | 擴展包 通過構造自定義任務和轉換,您可以添加為您的業務自定義的且可以在 DTS 中再次使用的新功能。通過構造自定義任務和轉換,您可以添加為您的業務自定義的且可以在 DTS 中再次使用的新功能。通過構造自定義任務和轉換,您可以添加為您的業務自定義的且可以在 DTS 中再次使用的新功能。 |
| ? | 執行包 不必從提供的任何工具執行 DTS 包,可以通過編程方式執行 DTS 包,并通過 COM 事件顯示進度,從而允許構造嵌入的或自定義的 DTS 執行環境。 |
提供的示例 DTS 程序可用來幫助您開始 DTS 編程。這些示例可以隨 SQL Server 2000 一起安裝。如果開發 DTS 應用程序,則可以重新發布 DTS 文件。有關詳細信息,請參閱 SQL Server 2000 光盤上的 Redist.txt。
返回頁首更多信息
Microsoft SQL Server 2000 聯機叢書包含了有關 DTS、使用 DTS 應用程序和生成自定義解決方案的更多信息。有關其他信息,請參閱這些資源:
| ? | Microsoft SQL Server Web 站點 |
| ? | Microsoft SQL Server 開發人員中心 |
| ? | SQL Server 雜志 |
| ? | 位于news://news.microsoft.com的 Microsoft.public.sqlserver.server 和 microsoft.public.sqlserver.datawarehouse 新聞組 |
| ? | 關于 SQL Server 的 Microsoft Official Curriculum 課程。有關最新課程的信息,請參閱Microsoft Training and Services Web 站點 |
總結
以上是生活随笔為你收集整理的Microsoft SQL Server 2000 中的数据转换服务 (DTS)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搞笑创意 zz
- 下一篇: 吉普赛人祖传的神奇读心术:你敢试吗?