1.通过工具DTS的设计器进行导入或导出 DTS的设计器功能强大,支持多任务,也是可视化界面,容易操作,但知道的人一般不多,如果只是进行中部分表的移动,用这种方法最好,当然,也可以进行全部表的移动。在SQL Server Entrise Manager中,展开左边的+,选择数据库,右击,选择All tasks/Import Data...(或All tasks/Export Data...),进入向导模式,按提示一步一步走就行了,里面分得很细,可以灵活的在不同数据源之间复制数据,很方便的。而且可以另存成DTS包,如果以后还有相同的复制任务,直接运行DTS包就行,省时省力。也可以直接打开DTS设计器,方法是展开服务器名称下面的Data Transformation Services,选Local Packages,在右边的窗口中右击,选New Package,就打开了DTS设计器。值得注意的是:如果源数据库要拷贝的表有外键,注意移动的顺序,有时要分批移动,否则外键主键,索引可能丢失,移动的时候选项旁边的提示说的很明白,或者一次性的复制到目标数据库中,再重新建立外键,主键,索引。其实建立数据库时,建立外键,主键,索引的文件应该和建表文件分开,而且用的数据文件也分开,并分别放在不同的器上,有利于数据库的优化。 2. 利用Bcp工具 这种工具虽然在SQL Server7的版本中不推荐使用,但许多数据库管理员仍很喜欢用它,尤其是用过SQL Server早期版本的人。Bcp有局限性,首先它的界面不是图形化的,其次它只是在SQL Server的表(视图)与文本文件之间进行复制,但它的优点是性能好,开销小,占用内存少,速度快。有兴趣的朋友可以查参考手册。 3. 利用备份和恢复 先对源数据库进行完全备份,备份到一个设备(device)上,然后把备份文件复制到目的服务器上(恢复的速度快),进行数据库的恢复操作,在恢复的数据库名中填上源数据库的名字(名字必须相同),选择强制型恢复(可以覆盖以前数据库的选项),在选择从设备中进行恢复,浏览时选中备份的文件就行了。这种方法可以完全恢复数据库,包括外键,主键,索引。 4. 直接拷贝数据文件 把数据库的数据文件(*.mdf)和日志文件(*.ldf)都拷贝到目的服务器,在SQL Server Query Analyzer中用语句进行恢复:
这样就把test数据库附加到SQL Server中,可以照常使用。如果不想用原来的日志文件,可以用如下的命令:
EXEC sp_detach_db @dbname = ’test’ EXEC sp_attach_single_file_db @dbname = ’test’, @physname = ’d:mssql7data est_data.mdf’ |
这个语句的作用是仅仅加载数据文件,日志文件可以由SQL Server数据库自动添加,但是原来的日志文件中记录的数据就丢失了。 5. 在应用程序中定制 可以在应用程序(、)中执行自己编写的程序,也可以在Query Analyzer中执行,这种方法比较灵活,其实是利用一个平台连接到数据库,在平台中用的主要时SQL语句,这种方法对数据库的影响小,但是如果用到远程链接服务器,要求网络之间的传输性能好,一般有两种语句: 1>
select ... into new_tablename where ... |
2>
insert (into) old_tablename select ... from ... where ... |
区别是前者把数据插入一个新表(先建立表,再插入数据),后者是把数据插入已经存在的一个表中,我个人喜欢后者,因为在编程的结构上,应用的范围上,第二条语句强于前者。 6. SQL Server的复制功能 SQL Server提供了强大的数据复制功能,也是最不易掌握的,具体应用请参考相关资料,值得注意的是要想成功进行数据的复制工作,有些条件是必不可少的: 1>SQL Server Agent必须启动,MSDTC必须启动。 2>所有要复制的表必须有主键。 3>如果表中有text或image数据类型,必须使用with log选项,不能使用with no_log选项。另外max text repl size选项控制可以复制的文本和图像数据的最大规模,超过这个限制的操作将失败。 4>在要进行复制的计算机上,应该至少是隐含共享,即共享名是C$或D$…。 5>为SQL Server代理使用的 NT帐号不能是一个本地的系统帐号,因为本地的系统帐号不允许网络存取。 6>如果参与复制的服务器在另外的计算机域中,必须在这些域之间建立信任关系。本人从事的工作是数据库管理员,要维护多台服务器中的数据库,经常把某台服务器中的某个数据库移动到另外一台服务器,对数据的移动有些心得体会,希望和大家共同交流 .
SQL Server 2000中的数据转换服务 (DTS)
摘要: 为了完成数据合并、存档和分析等任务;为了进行应用程序开发;为了进行数据库或服务器升级,数据库管理员经常需要导入、导出以及转换数据。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 文件。
更多信息
Microsoft SQL Server 2000 Books Online中拥有许多有关 DTS、使用DTS应用程序以及构建定制解决方案的信息。其他信息,请参考下列资源:
• | Microsoft SQL Server Web站点,地址为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。 |
• | 关于SQL Server的微软官方课程(Microsoft Official Curriculum)。如需了解最新的课程信息,请访问Microsoft Training and Services Web站点,地址为http://www.microsoft.com/traincert/default.asp [英文] |