INF:了解 SQL Server 2000 中的“复制数据库向导”及其疑难解答

本文已归档。它按“原样”提供,并且不再更新。
概要
“复制数据库向导”是 SQL Server 2000 中的新实用工具,供您从 SQL Server 7.0 或 SQL Server 2000 向 SQL Server 2000 移动或复制数据库。该复制或移动过程相当简便,看起来对工作几乎没有任何影响。本文提供有关“复制数据库向导”运行方式的信息,同时概要说明在使用该向导时需要注意的一些问题。
更多信息

“复制数据库向导”的运行方式

打开“复制数据库向导”:
  • 在“SQL Server 企业管理器”中,单击管理,然后单击运行向导

    - 或 -

  • 右键单击数据库文件夹,单击所有任务,然后单击复制数据库向导...

    - 或 -

  • 在命令提示符下,键入 Cdw.exe,然后按 Enter 键。
该向导分离要复制或移动的数据库,将与该数据库相关的文件复制到目标服务器,然后再附加该数据库。数据库的分离和附加是通过以下存储过程执行的:
  • sp_detach_db

    - 和 -

  • sp_attach_db
有关这些存储过程的更多信息,请参阅“SQL Server 联机丛书”中的“sp_attach_db”和“sp_detach_db”主题。

实际通过 XP_CMDSHELL 复制文件,XP_CMDSHELL 从命令行执行 COPY(复制)命令。因此,运行“复制数据库向导”的帐户必须是 sysadmin 的成员,这一点非常重要。有关更多信息,请参见“SQL Server 联机丛书”中的“Using the Copy Database Wizard”(使用复制数据库向导)。

该向导执行下列步骤:
  1. 在源计算机上创建用于存放复制文件的 UNC 共享点。
  2. 检查源数据库中是否存在活动连接。
  3. 将数据库置于单用户模式。
  4. 分离源数据库。
  5. 检查目标位置是否存在文件,然后将数据库文件复制到先前创建的共享点。
  6. 重新将数据库附加到源服务器。
  7. 将数据库附加到目标服务器。
  8. 删除 UNC 共享。
  9. 将数据库恢复到原始模式(单用户、多用户,等等)。
该向导还有四种功能,您可以使用它们移动与正在复制或移动的数据库相关的对象。
  • 登录(推荐)。
    • 包运行时检测到的所有登录。
    • 仅限于选定数据库使用的登录。
  • Master 数据库中的共享存储过程(可选)。
    • 包运行时检测到的所有存储过程。
    • 用户选定的存储过程。
  • msdb 中的作业(可选)。
    • 包运行时检测到的所有作业。
    • 用户选定的作业。
  • 用户定义的错误信息(可选)。
    • 包运行时检测到的所有错误信息。
    • 用户选定的错误信息。

向导创建“数据转换服务”(DTS) 包

“复制数据库向导”创建在目标服务器上运行的 DTS 包,您可以立即运行 DTS 包,也可以安排稍后再运行。另外,您可以通过使用“DTS 设计器”工具并单击传输数据库任务来手动创建数据库 DTS 包的副本。有关更多信息,请参见“SQL Server 2000 联机丛书”中的 Transfer Database Objects Tasks(传输数据库对象任务)主题。

如果您安排定期运行或一次运行 DTS 包,该包将被保存。因此,您需要启动目标服务器上的“SQL Server 代理”。“传输数据库”DTS 包必须与任何其他 DTS 包同等处理,它们之间的不同是前者包含与安排和运行包相关的要求和权限。有关如何解决预定 DTS 包问题的更多信息,请参见 Microsoft 知识库中的以下文章:
269074 INF:如何将 DTS 包运行为预定作业
您可以对 Microsoft SQL Server 7.0 使用“复制数据库向导”,但 Microsoft SQL Server 7.0 只能作为源数据库服务器。不能对 Microsoft SQL Server 6.x 或更早的版本使用该向导。

“复制数据库向导”日志 — DTS 包日志

许多 CDW 事件存储在 MSDB.sysdtspackagelog 系统表中,您也可以通过“SQL 企业管理器”(SEM) 查看这些日志。要查看日志,请按照下列步骤操作:
  1. 在存储包的目标服务器上,打开 SEM 并展开“数据转换服务”文件夹。
  2. 本地包下找到要查看其日志的包。默认情况下,包的命名格式为“CDW_源服务器_目标服务器_自动编号”。
  3. 右键单击所需的包,然后选择包日志选项。
  4. DTS 包版本和日志树下,单击加号 (+) 以展开并查看日志列表。
在此对话框中,您可以查看该包的日志,也可以从下拉框选择其他包,还可以单击删除按钮,删除不需要的日志。

另外,您可以配置“DTS 包”生成用于排除故障的输出文件。
  1. 右键单击该包,选择设计包
  2. 菜单上,选择属性
  3. 日志记录选项卡上,指定 errr 文件。

    该文件将包含有关包执行情况的详细信息。

复制文件的权限

目标 SQL Server 启动帐户必须是域帐户,而且,该帐户必须具有源 SQL Server 服务器计算机的本地管理员权限,这样才能从源向目标复制文件。

如果使用本地系统帐户启动目标 SQL Server,将出现以下错误信息:
Your SQL Server Service is running under the local system account.You need to change your SQL Server Service account to have the rights to copy files over the network.
如果用来启动目标 SQL Server 的域帐户没有源计算机的本地管理员权限,该向导可能生成以下错误信息:
Step Error Source:Microsoft Data Transformation Services (DTS) Package
Step Error Description:Unspecified error

Step Error code:80004005
Step Error Help File:sqldts80.hlp
Step Error Help Context ID:1100
单击更多信息>>> 按钮,您将发现没有创建远程共享的权限。
Failed to create the share OMWWIZD

切记数据库分离

正如前面提到的,“复制数据库向导”在将源数据库复制到目标服务器之前,先分离源数据库。如果数据库标记为 suspect(可疑),或数据库中存在可能会阻止分离或重新连接的任何其他问题,则不要运行“复制数据库向导”。I/O 错误(如错误 823)、数据完整性错误(如 Table Corrupt)或任何已知的硬件问题(如系统事件日志中的 SCSI 端口错误或控制器错误),诸如此类的错误都可能导致无法成功重新连接数据库。

确保源数据库没有标记为“read only”(只读)、“offline”(脱机)、“suspect”(可疑)、“emergency”(紧急)或“loading”(加载),否则分离将失败。分离失败的原因是分离过程必须更新数据库中的统计信息;如果因任何原因而无法写入数据库,统计信息的更新将失败。如果因数据库处于不可写入的状态而导致分离失败,则生成以下错误信息:
Failed to detach the database <DatabaseName>
单击查看错误按钮将显示以下信息:
Step Error Source:Microsoft Data Transformation Services (DTS) Package
Step Error Description:Unspecified error

Step Error code:80004005
Step Error Help File:sqldts80.hlp
Step Error Help Context ID:1100
此外,分离数据库要求数据库处于单用户模式或没有用户与之相连。如果多个用户正在使用数据库,则该向导可能因以下错误而失败:
Step Error Source:Microsoft Data Transformation Services (DTS) Package
Step Error Description:Unspecified error

Step Error code:80004005
Step Error Help File:sqldts80.hlp
Step Error Help Context ID:1100
如果单击更多信息按钮,则可看到问题的根本原因:
Database [dbname] has [N] active connections.Database will not be transferred.

分离数据库的权限

分离数据库要求具备一定的权限。“SQL Server 2000 联机丛书”阐明了使用该向导所需具备的相应权限:
“To use the Copy Database Wizard, you must be a system administrator or a member of the sysadmin role.If you are running Microsoft Windows NT® 4.0 or Microsoft Windows® 2000, your user account must have administrator privileges on the destination server.”(要使用“复制数据库向导”,您必须是系统管理员或 sysadmin 角色的成员。如果运行 Microsoft Windows NT® 4.0 或 Microsoft Windows® 2000,您的用户帐户必须具有目标服务器的管理员权限。)

确保存在目标目录

在使用“复制数据库向导”(CDW) 时,请在数据库文件位置屏幕上,单击修改按钮,然后确认目标目录是否正确。如果目录不存在,CDW 可能因以下错误而失败:
Step Error Source:Microsoft Data Transformation Services (DTS) Package
Step Error Description:Unspecified error

Step Error code:80004005
Step Error Help File:sqldts80.hlp
Step Error Help Context ID:1100
如果单击更多信息>>> 按钮,您将发现该目录不存在。
File \\SOURCE_SERVER\OMWWIZx\Program Files\Microsoft SQL Server\MSSQL\Data\Filename_Data.mdf cannot be copied because the destination directory does not exist.

“移动”选项删除数据库

请记住,如果选择移动数据库,而不是复制数据库,将从源 SQL Server 服务器删除该数据库。更确切地说,该数据库会从源服务器分离,但不会重新附加到源服务器。不过,原始数据库文件 (.mdf, .ndf, .ldf) 仍保留在源服务器上,如果出于空间考虑而不需要这些文件,则必须将它们手动删除。完成复制数据库向导对话框中显示以下警告信息:
Database 'Pubs' will be copied but will be available only on the destination server.The administrator must delete the data and log files for database 'Pubs' on the source server.
不过,如果本想使用 COPY(复制)选项但误选了 MOVE(移动)选项,则可将这些文件安全地重新附加到服务器,以恢复数据库。

移动登录

“复制数据库向导”的一项新功能缓解了手动移动登录的问题。该向导标识与数据库用户对应的登录,并允许您选择在移动或复制数据库的过程中移动或复制这些登录。SQL Server 标准身份验证登录和 Microsoft Windows NT 及 Microsoft Windows 2000 身份验证登录都由该向导移动。

SQL Server 的早期版本需要手动干预才能移动与所复制或移动的数据库的数据库用户相关的登录。有关为 SQL Server 的早期版本传输登录的更多信息,请参见 Microsoft 知识库中的以下文章:
168001 PRB:在恢复转储后出现用户登录和/或权限错误
246133 如何在 SQL Server 实例之间传输登录和密码
请注意,不能在不同计算机之间传输授予了 SQL Server 登录访问权限的本地 Windows NT/2000 组和用户。如果尝试这样做,登录传输将失败。如果单击更多信息 >>> 按钮,则可看到问题的根本原因:
"Transfer Login SourceMachine\LocalGroup1 Failed "
- 或 -
"Transfer Login SourceMachine\LocalUser1 Failed "

数据库/文件已存在或没有足够的磁盘空间

在传输数据库时,该向导检测目标服务器上是否已存在此数据库。在选择要移动或复制的数据库对话框中,如果数据库的状态为 OK(好),说明可以传输该数据库,如果数据库已经存在或是系统数据库(如 master 数据库),则不能传输该数据库。

如果目标服务器上已存在相同的数据库文件,也会停止传输数据库。因此,您可能有一个名为 MyPubs 的数据库,而目标服务器上可能已有同名的 Pubs 数据库。在此情况下,这些文件目标将标有红 X。
"Files on the source have the same name as on the destination or there is not enough free disk space on the destination."
如果要避免出现该错误信息,请修改要在目标服务器上创建的文件名,或更改要在其中创建文件的物理位置。

目标服务器上的磁盘空间不足也会妨碍传输。请更改驱动器或删除某些文件以确保足够的空间。

“全文”检索停止。不传输“全文”目录文件

如果数据库包含任何全文目录,使用“复制数据库向导”传输目录文件会有两个影响。首先,该向导停止检索“全文”(FT) 目录,以便将数据库置于单用户模式。其次,该向导不移动 FT 目录文件。在运行“复制数据库向导”之后,如果尝试在源或目标 SQL Server 上运行全文检索查询,可能会出现以下错误信息:
Server:Msg 7616, Level 16, State 1, Line 1
Full-Text Search is not enabled for the current database.Use sp_fulltext_database to enable full-text search for the database.
有关更多信息,请参见 Microsoft 知识库中的以下文章:
303224 FIX:使用复制数据库向导来复制数据库会禁止对源数据库进行全文本索引
要在源和目标 SQL Server 服务器上执行全文检索,请使用以下步骤:
  1. 运行以下存储过程,对源和/或目标数据库启用全文索引:
    sp_fulltext_database 'enable'					
  2. 对所有目录执行完全填充。
下面是“SQL Server 联机丛书”中的相关内容:
“If you want to copy a database with full-text catalogs, full-text catalogs for the database are unavailable at the source server after the copy operation has been completed.You must manually repopulate full-text catalogs on the destination server.(如果要复制带有全文目录的数据库,则在完成复制操作后,无法在源服务器上使用数据库的全文目录。您必须在目标服务器上手动重新填充全文目录。)

If you want to move a database with full-text catalogs, none of the associated full-text catalog files are moved when the database is moved.These files must be moved manually by the database administrator.”(如果要移动带有全文目录的数据库,在移动数据库时不会移动相关的全文目录文件。这些文件必须由数据库管理员手动移动。)
有关如何移动“全文”目录的更多信息,请参见 Microsoft 知识库中的以下文章:
240867 INF:如何移动、复制和备份全文本目录文件夹和文件
参考
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
327270Windows Server 2003 终端服务器应用程序服务器上不支持 SQL Server 2000
cdw exe 80004005 error message
属性

文章 ID:274463 - 上次审阅时间:12/05/2015 21:53:39 - 修订版本: 7.0

Microsoft SQL Server 2000 标准版

  • kbnosurvey kbarchive kbsqldeveloper kbinfo KB274463
反馈