运行SQL Server的计算机间移动数据库

网络整理 - 07-27

概要

本文分步介绍了如何在运行 SQL Server 的计算机之间移动 Microsoft SQL Server 用户数据库和大多数常见的 SQL Server 组件。

本文中介绍的步骤假定您不移动 master、model、tempdb 或 msdb 这些系统数据库。这些步骤为您传输登录以及master 和 msdb 数据库中包含的大多数常见组件提供了多个选项。

注意:支持将数据从 SQL Server 2000 迁移到 Microsoft SQL Server 2000(64 位)。您可以将一个 32 位数据库附加到一个 64 位数据库上,方法是:使用 sp_attach_db 系统存储过程或 sp_attach_single_file_db 系统存储过程,或者使用 32 位企业管理器中的备份和还原功能。您可以在 SQL Server 的 32 位和 64 位两种版本之间来回移动数据库。您还可以使用同样的方法从 SQL Server 7.0 迁移数据。但是,不支持将数据从 SQL Server 2000(64 位)降级到 SQL Server 7.0。下面分别介绍这几种方法。

如果您使用的是 SQL Server 2005

您可以使用相同的方法从 SQL Server 7.0 或 SQL Server 2000 迁移数据。但是,Microsoft SQL Server 2005 中的管理工具与 SQL Server 7.0 或 SQL Server 2000 中的管理工具有所不同。您应该使用 SQL Server Management Studio(而不是 SQL Server 企业管理器)以及 SQL Server 导入和导出向导 (DTSWizard.exe)(而不是数据转换服务导入和导出数据向导)。

备份和还原

在源服务器上备份用户数据库,然后将用户数据库还原到目标服务器上。• 在备份过程中时可能有人使用数据库。如果用户在备份完成后对数据库执行 INSERT、UPDATE 或 DELETE 语句,则备份中不会包含这些更改。如果您必须传输所有更改,那么,假如您既执行事务日志备份又执行完整数据库备份,您可以以尽可能短的停止时间来传输这些更改。1. 在目标服务器上还原完整数据库备份,并指定 WITH NORECOVERY 选项。

注意:为防止对数据库做进一步的修改,请指导用户在源服务器上退出数据库活动。

2. 执行事务日志备份,然后使用 WITH RECOVERY 选项将事务日志备份还原到目标服务器上。停止时间仅限于事务日志备份和恢复的时间。

• 目标服务器上的数据库将与源服务器上的数据库大小相同。要减小数据库的大小,您必须在执行备份前压缩源数据库的大小,或者在完成还原后压缩目标数据库的大小。

• 如果您将数据库还原到的文件位置不同于源数据库的文件位置,则必须指定 WITH MOVE 选项。例如,在源服务器上,数据库位于 D:\Mssql\Data 文件夹中。目标服务器没有 D 驱动器,因而您需要将数据库还原到 C:\Mssql\Data 文件夹。 有关如何将数据库还原到其他位置的更多信息,请查看相关资料。

• 如果您想覆盖目标服务器上的一个现有数据库,则必须指定 WITH REPLACE 选项。

• 源服务器和目标服务器上的字符集、排序顺序和 Unicode 整序可能必须相同,具体取决于您要还原到 SQL Server 的哪种版本。有关更多信息,请参阅本文中的“关于排序规则的说明”一节。

Sp_detach_db 和 Sp_attach_db 存储过程

要使用 sp_detach_db 和 sp_attach_db 这两个存储过程,请按下列步骤操作:1. 使用 sp_detach_db 存储过程分离源服务器上的数据库。您必须将与数据库关联的 .mdf、.ndf 和 .ldf 这三个文件复制到目标服务器上。参见下表中对文件类型的描述:

文件扩展名 说明 .mdf 主要数据文件 .ndf 辅助数据文件 .ldf 事务日志文件

2. 使用 sp_attach_db 存储过程将数据库附加到目标服务器上,并指向您在上一步骤中复制到目标服务器的文件。

• 分离数据库后将无法访问该数据库,并且复制文件时也无法使用该数据库。在进行分离的那一时刻数据库中包含的所有数据都被移动。

• 在您使用附加或分离方法时,两个服务器上的字符集、排序顺序和 Unicode 整序都必须相同。有关更多信息,请参阅本文中的“关于排序规则的说明”一节。

关于排序规则的说明

如果您使用备份和还原或附加和分离方法在两个 SQL Server 7.0 服务器之间移动数据库,则两个服务器上的字符集、排序顺序和 Unicode 整序都必须相同。如果您将数据库从 SQL Server 7.0 移到 SQL Server 2000,或者在不同的 SQL Server 2000 服务器之间移动数据库,则数据库将保留源数据库的整序。这意味着,如果运行 SQL Server 2000 的目标服务器的整序与源数据库的整序不同,则目标数据库的整序也将与目标服务器的 master、model、tempdb 和 msdb 数据库的整序不同。

第一步:导入和导出数据(在 SQL Server 数据库之间复制对象和数据)

您可以使用数据转换服务导入和导出数据向导来复制整个数据库或有选择地将源数据库中的对象和数据复制到目标数据库。• 在传输过程中,可能有人在使用源数据库。如果在传输过程中有人在使用源数据库,您可能会看到传输过程中出现一些阻滞现象。

• 在您使用导入和导出数据向导时,源服务器与目标服务器的字符集、排序顺序和整序不必相同。

• 因为源数据库中未使用的空间不会移动,所以目标数据库不必与源数据库一样大。同样,如果您只移动某些对象,则目标数据库也不必与源数据库一样大。

• SQL Server 7.0 数据转换服务可能无法正确地传输大于 64 KB 的文本和图像数据。但 SQL Server 2000 版本的数据转换服务不存在此问题。