摘要:数据库管理员经常需要导入、导出或转换数据以便支持诸如数据合并、归档和分析等任务,以及开发应用程序或升级数据库或服务器。SQL Server 2000 中的数据转换服务 (DTS) 提供了一套图形化工具和可编程对象,以帮助管理员和开发人员解决数据移动问题,其中包括将数据从分散的数据源中提取出来,并且转换、合并到一个或多个目标位置。可以将任务组、工作流操作以及约束条件收集起来形成 DTS 软件包,然后安排它定期运行或在某些事件发生后运行。本白皮书将介绍 DTS,并对可用于创建 DTS 解决方案的一些组件和服务进行说明,还将阐释如何使用 DTS 设计器来实施 DTS 解决方案,并介绍 DTS 应用程序的开发情况。
图 1. DTS 设计器界面
通过将连接和任务拖动到设计工作表,然后指定工作流的执行顺序,可以方便地使用 DTS 设计器来生成功能强大的 DTS 软件包。以下各部分将对任务、工作流、连接和转换进行定义,并阐释使用 DTS 设计器实施 DTS 解决方案的方便性。
任务:定义软件包中的步骤
一个 DTS 软件包通常包括一个或多个任务。每个任务定义一个在软件包执行期间可能要执行的工作项。可以使用这些任务进行以下操作:
1 SQL Server 2000 中的新功能。
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 中可以使用的优先级约束条件类型。
图 3. 使用“按完成顺序”优先级约束条件的 ActiveX 脚本任务和发送邮件任务
可以分别配置发送邮件任务,一个配置为使用“按成功情况”约束条件,一个配置为使用“按失败情况”约束条件。两个发送邮件任务可根据 ActiveX 脚本成功还是失败发送不同的消息。
图 4. 邮件任务
您还可以对一个任务采用多个优先级约束条件。例如,发送邮件任务“管理通知”可以在脚本 #1 采用“按成功情况”约束条件,在脚本 #2 采用“按失败情况”约束条件。在这些情况下,DTS 假设存在逻辑关系“AND”。因此,只有在脚本 #1 成功执行而脚本 #2 失败的情况下,才会发送“管理通知”消息。
图 5.示例:对一项任务采用多个优先级约束条件
连接:访问和移动数据
要成功执行复制和转换数据的 DTS 任务,DTS 软件包必须与它的源和目标数据以及所有其它数据源(如查找表)建立有效连接。
创建软件包时,通过从可用的 OLE DB 提供程序和 ODBC 驱动程序列表选择连接类型,可对连接进行配置。可用的连接类型包括:
DTS 允许您使用任何 OLE DB 连接。使用“连接”工具栏上的图标可以便捷地访问常用的各种连接。
下图显示一个使用两种连接的软件包。数据将从 Access 数据库(源连接)复制到 SQL Server 产品数据库(目标连接)。
图 6. 示例:使用两种连接的软件包
此软件包中的第一个步骤是一个执行 SQL 任务,该任务检查是否目标表已经存在。如果存在,将删除它然后重新创建。成功完成执行 SQL 任务后,第二个步骤是将数据复制到 SQL Server 数据库。如果复制操作失败,第三个步骤是发送一份电子邮件。
数据泵:转换数据
DTS 数据泵是一个 DTS 对象,它驱动数据的导入、导出和转换操作。在执行数据转换、数据驱动查询和并行数据泵任务期间将使用数据泵。执行这些任务的过程是:在源和目标连接上创建行集合,然后创建数据泵实例在源和目标间移动这些行。在复制每一行时,将进行转换操作。
下图中, 在第二个步骤中,转换数据任务在 Access DB 任务和 SQL Production DB 任务之间进行。 转换数据任务用连接间的灰色箭头表示。
图 7. 示例:转换数据任务
要定义从源连接收集的数据,可以生成一个转换任务的查询。DTS 支持参数化查询,参数化查询允许在执行查询时定义查询值。
可以将查询键入任务的“属性”对话框,也可以使用数据转换服务查询设计器,它是一个用图形化方式生成 DTS 任务查询的工具。下图中,使用查询设计器来生成一个查询,该查询联接 pubs 数据库中的三个表。
图 8. 数据转换服务查询设计器界面
在转换任务中,还可以定义要对数据进行的更改。下表说明 DTS 提供的内置转换。
还可以用编程方式创建自己的自定义转换。生成自定义转换最快速的方式是使用活动模板库 (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 元数据服务
如果准备跟踪软件包版本、元数据和数据系列信息,该选项将 DTS 软件包保存到元数据服务。
结构化存储文件
如果希望在网络间复制、移动和发送软件包而不必将其存储在 Microsoft SQL Server 数据库中,该选项将 DTS 软件包保存到结构化存储文件。
Microsoft Visual Basic
如果要将 DTS 软件包合并到 Visual Basic 程序中或将其用作 DTS 应用程序开发的原型,该选项将通过 DTS 设计器或 DTS 导入/导出向导所创建的 DTS 软件包保存到 Microsoft Visual Basic 文件。
DTS 作为应用程序开发平台
DTS 设计器为数据移动任务提供了多种解决方案。因为提供通过编