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 Designer 中,您可以将连接和任务拖动到设计页中,并指定工作流执行的顺序,从而轻松地创建功能强大的 DTS 数据包。下面的内容将定义任务、工作流、连接和转换,并介绍如何使用 DTS Designer 轻松地实施 DTS 解决方案。
任务:定义数据包中的步骤
DTS 数据包中通常包含一个或多个步骤。每个任务定义了一个可能在数据包执行过程中执行的工作项目。您可以使用任务来:
• | 转换数据
|
• | 复制和管理数据
|
• | 从数据包中将任务作为作业运行
|
转换数据任务 | 用来将数据从来源移动到目标,可以选择在数据上应用数据栏转换。 | |
数据驱动的查询任务 | 用来对数据执行基于 Transact-SQL 的灵活操作,包括存储过程以及 INSERT、UPDATE 或 DELETE 声明。 | |
? | 平行数据泵任务 (1) | 仅可用于编程,平行数据泵任务执行与转换数据和数据驱动的查询任务相同的功能,但是支持 OLE DB 2.5 及更新版本所定义的 “章节式” 数据行集。 |
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 中使用的优先级限制的类型。
优先级限制 | 说明 |
On Completion(完成后) (蓝色箭头) | 如果您希望任务 2 处于等待状态,直至任务 1 完成(无论结果如何),那么就使用 On Completion 优先级限制将任务 1 链接到任务 2。 |
On Success(成功后) (绿色箭头) | 如果您希望任务 2 处于等待状态,直至任务 1 成功完成,那么就使用 On Success 优先级限制将任务 1 链接到任务 2。 |
On Failure(失败后) (红色箭头) | 如果您希望任务 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 驱动程序
|
• | 其他驱动程序
|
Microsoft OLE DB Provider for SQL Server | |
Microsoft 数据链接 | |
Microsoft ODBC Driver for Oracle |
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 脚本方法为每个选中的阶段使用不同的功能和入口点,而这种方法提供了单一入口点,由多个数据泵阶段在任务执行过程中调用。 |
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 [英文]