如何在运行 SQL Server 的计算机之间移动数据库

本页

概要

如果您使用的是 SQL Server 2005

备份和还原

Sp_detach_db 和 Sp_attach_db 存储过程

关于排序规则的说明

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

第 2 步:如何传输登录和密码

第 3 步:如何解决孤立用户

第 4 步:如何移动作业、警报和运算符

第 5 步:如何移动 DTS 包

方法 1

方法 2

更多信息

参考

概要

本文分步介绍了如何在运行 sql Server 的计算机之间移动 Microsoft sql Server 用户数据库和大多数常见的 sql Server 组件。
本文中介绍的步骤假定您不移动 mastermodeltempdbmsdb 这些系统数据库。这些步骤为您传输登录以及mastermsdb 数据库中包含的大多数常见组件提供了多个选项。
有关执行本文中介绍的步骤时未传输的特定项目的信息,请参阅本文中的“更多信息”一节。
注意支持将数据从 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 选项将事务日志备份还原到目标服务器上。停止时间仅限于事务日志备份和恢复的时间。有关更多信息,请参阅 sql Server 联机丛书的“Transact-sql 参考”主题中的“还原”子主题

•目标服务器上的数据库将与源服务器上的数据库大小相同。要减小数据库的大小,您必须在执行备份前压缩源数据库的大小,或者在完成还原后压缩目标数据库的大小。有关更多信息,请参阅 sql Server 联机丛书的“创建和维护数据库标题下的“压缩数据库”子主题

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

221465 (http://support.microsoft.com/kb/221465/) INF:结合使用 WITH MOVE 选项和 RESTORE 语句

304692 (http://support.microsoft.com/kb/304692/) INF:使用 BACKUP 和 RESTORE 将 sql Server 7.0 数据库移到新的位置

•如果您想覆盖目标服务器上的一个现有数据库,则必须指定 WITH REPLACE 选项。有关更多信息,请参阅 sql Server 联机丛书的“Transact-sql 参考”主题中的“还原”子主题

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

Sp_detach_db 和 Sp_attach_db 存储过程

要使用 sp_detach_dbsp_attach_db 这两个存储过程,请按下列步骤操作:

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

文件扩展名说明

.mdf主要数据文件

.ndf辅助数据文件

.ldf事务日志文件

2.使用 sp_attach_db 存储过程将数据库附加到目标服务器上,并指向您在上一步骤中复制到目标服务器的文件。 有关如何使用这些方法的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章

224071 (http://support.microsoft.com/kb/224071/) 如何通过使用 sql Server 中的分离和附加功能sql Server 数据库移到新位置

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

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

关于排序规则的说明

如果您使用备份和还原或附加分离方法在两个 sql Server 7.0 服务器之间移动数据库,则两个服务器上的字符集、排序顺序和 Unicode 整序都必须相同。如果您将数据库sql Server 7.0 移到 sql Server 2000,或者在不同的 sql Server 2000 服务器之间移动数据库,则数据库将保留源数据库的整序。这意味着,如果运行 sql Server 2000 的目标服务器的整序与源数据库的整序不同,则目标数据库的整序也将与目标服务器的 mastermodeltempdbmsdb 数据库的整序不同。有关更多信息,请参见 sql Server 2000 联机丛书中的“混合整序环境”主题

导入和导出数据(在 sql Server 数据库之间复制对象和数据)

您可以使用数据转换服务导入和导出数据向导来复制整个数据库或有选择地将源数据库中的对象和数据复制到目标数据库

•在传输过程中,可能有人在使用源数据库。如果在传输过程中有人在使用源数据库,您可能会看到传输过程中出现一些阻滞现象。

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

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

sql Server 7.0 数据转换服务可能无法正确地传输大于 64 KB 的文本和图像数据。但 sql Server 2000 版本的数据转换服务不存在此问题。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章

257425 (http://support.microsoft.com/kb/257425/) FIX:DTS 对象传输不能传输大于 64 KB 的 BLOB 数据

第 2 步:如何传输登录和密码

如果您不将源服务器中的登录传输到目标服务器,当前的 sql Server 用户就无法登录到目标服务器。您可以按照下面的 Microsoft 知识库文章中的说明来传输登录和密码:

246133 (http://support.microsoft.com/kb/246133/) 如何在 sql Server 实例之间传输登录和密码

目标服务器上的登录数据库可能与源服务器上的登录数据库不同。您可以使用 sp_defaultdb 存储过程来更改登录数据库。有关更多信息,请参见 sql Server 联机丛书中的“Transact-sql 参考”主题的“sp_defaultdb”子主题

第 3 步:如何解决孤立用户

在您向目标服务器传输登录和密码后,用户可能还无法访问数据库登录用户是靠安全识别符 (SID) 关联在一起的;在您移动数据库后,如果 SID 不一致,sql Server 可能会拒绝用户访问数据库。此问题称为孤立用户。如果您使用 sql Server 2000 DTS 传输登录功能来传输登录和密码,就可能会产生孤立用户。此外,被允许访问与源服务器处于不同域中的目标服务器的集成登录帐户,也会导致出现孤立用户

1.查找孤立用户。在目标服务器上打开查询分析器,然后在您移动的用户数据库中运行以下代码

exec sp_change_users_login 'Report'

此过程将列出任何未链接一个登录帐户的孤立用户。如果没有列出用户,请跳过第 2 步和第 3 步,直接进行第 4 步。

2.解决孤立用户问题。如果一个用户是孤立用户数据库用户可以成功登录到服务器,但却无权访问数据库。如果您尝试向数据库授予登录访问权,则会因该用户已经存在而出现下列错误消息:

Microsoft sql-DMO (ODBC sqlState:42000) 错误 15023:当前数据库中已存在用户或角色 '%s'。

有关如何解决孤立用户的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章

240872 (http://support.microsoft.com/kb/240872/) 如何解决在运行 sql Server 的服务器之间移动数据库时的权限问题

文章介绍如何将登录映射到数据库用户,以及如何解决标准的 sql Server 登录和集成登录产生的孤立用户

274188 (http://support.microsoft.com/kb/274188/) PRB:联机丛书中的“孤立用户疑难解答”主题不完整

上面的文章介绍了如何使用 sp_change_users_login 存储过程来逐个纠正孤立用户sp_change_users_login 存储过程仅能解决标准的 sql Server 登录帐户的孤立用户问题。

3.如果数据库所有者 (dbo) 被当作孤立用户列出,请在用户数据库中运行下面的代码

exec sp_changedbowner 'sa'

此存储过程会将数据库所有者更改为 dbo解决这个问题。要将数据库所有者更改为另一用户,请使用您想使用的用户再次运行 sp_changedbowner。有关更多信息,请参见 sql Server 联机丛书的“Transact-sql 参考”主题中的“sp_changedbowner”子主题

4.如果您的目标服务器运行的是 sql Server 2000 Service Pack 1,则在您执行附加操作或还原操作(或两种操作都执行)后,企业管理器的用户文件夹中的列表中可能没有数据库所有者用户。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章

305711 (http://support.microsoft.com/kb/305711/) BUG:在企业管理器中没有显示 DBO 用户

5.如果目标服务器上不存在映射到源服务器上的 dbo登录,您在尝试通过企业管理器更改系统管理员 (sa) 密码时,可能会收到以下错误消息:

错误 21776:[sql-DMO] 名称 'dbo' 在 Users 集合中没有找到。如果该名称是合法名称,则使用 [] 来分隔名称的不同部分,然后重试。

有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章

218172 (http://support.microsoft.com/kb/218172/) PRB:在企业管理器中不能更改 SA 密码

警告:如果您再次还原或附加数据库,则数据库用户可能会再次被孤立,这样您就必须重复第 3 步操作。

第 4 步:如何移动作业、警报和运算符

第 4 步是可选操作。您可以为源服务器上的所有作业、警报和运算符生成脚本,然后在目标服务器上运行脚本。

•要移动作业、警报和运算符,请按照下列步骤操作:

1.打开 sql Server 企业管理器,然后展开管理文件夹。

2.展开 sql Server 代理,然后右键单击警报作业运算符

3.单击所有任务,然后单击生成 sql 脚本。对于 sql Server 7.0,请单击为所有作业生成脚本警报运算符

您可以用右键单击选择为所有警报所有作业所有运算符生成脚本。

•您可以将作业、警报和运算符从 sql Server 7.0 移到 sql Server 2000,也可以在运行 sql Server 7.0 和运行 sql Server 2000 计算机之间移动。

•如果在源服务器上为运算符设置了 sqlMail 通知,则目标服务器上也必须设置 sqlMail,才能具有相同的功能。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章

263556 (http://support.microsoft.com/kb/263556/) INF:如何配置 sql Mail

第 5 步:如何移动 DTS 包

第 5 步是可选操作。如果 DTS 包在源服务器上存储在 sql Server 中或存储库中,您可以在需要时移动这些包。要在服务器之间移动 DTS 包,请使用下列方法之一。

方法 1

1.在源服务器上将 DTS 包保存到一个文件中,然后在目标服务器上打开 DTS 包文件

2.将目标服务器上的包保存到 sql Server 或存储库中。
注意:您必须用单独的文件逐个地移动这些包。

方法 2

1.在 DTS 设计器中打开每个 DTS 包。

2.在菜单上,单击另存为

3.指定目标 sql Server。

注意:在新服务器上,包可能无法正常运行。您可能必须对包进行更改,更改包中任何对旧的源服务器上的连接、文件、数据源、配置文件和其他信息的引用,以便引用新的目标服务器。您必须根据每个包的设计逐个包进行这些更改。

更多信息

您可能还需要移动其他一些项目,例如复制、日志传送、全文目录、指定的备份设备、维护计划和链接的服务器等。如果您需要的话,您可以检查这些配置的源服务器,然后在目标服务器上采用相应的步骤手动设置它们。
有关如何移动全文组件的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章

240867 (http://support.microsoft.com/kb/240867/) 如何移动、复制和备份全文目录文件夹和文件

本文中介绍的步骤不移动数据库关系图以及备份与还原历史记录。如果您必须移动这些信息,请移动 msdb 系统数据库。有关如何移动 msdb 数据库的信息,请参阅本文的“第 1 步:如何移动用户数据库”一节中引用的 Microsoft 知识库文章。如果您移动 msdb 数据库,则不必执行“第 4 步:如何移动作业、警报和运算符”或“第 5 步:如何移动 DTS 包”。

参考

有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章

320125 (http://support.microsoft.com/kb/320125/) 如何移动数据库关系图

from: http://support.microsoft.com/kb/314546/zh-cn

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sqlalche...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册表读取等system。是mssql的最高权限db权限:文件管理,数据库操作等 users-administratorspublic权限:数据库操作 guest-users2、sql server注入执行命令查
本页概要如果您使用的是 SQL Server 2005备份和还原Sp_detach_db 和 Sp_attach_db 存储过程关于排序规则的说明导入和导出数据(在 SQL Server 数据库之间复
DBCC CHECKIDENT 检查指定表的当前标识值,如有必要,还对标识值进行更正。 语法 DBCC CHECKIDENT ( 'table_name' [ , { NORESEED
这里对 SQL Server 字符串函数进行分门别类地列出,便于查阅和记忆,相信大家都在其它方面有高深的编程基础,从字面上来说大家都知道这些函数的意义,就不对这些函数作过多的解释了,主要谈些经验,具体
查询及删除重复记录的方法 1、查找表(people)中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select*frompeoplewherepeopleIdin(selectpe
微软发SQL Server 2008第二个CTP预览版from: http://news.csdn.net/n/20070807/107158.html8月7日消息,微软公司本周发布了SQL Serv
症状当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题。SQL Server 联机丛书中的孤立用户疑难解答主题中没有讲述解决此问题的具体步骤。本文介绍了如何解决孤立用户问题。更多信息虽然术
当登录SQL Server 2005时可能碰到错误: 'No Process is on the Other End of the Pipe'。解决方法:(1)Open up SQL
概要本文描述如何映射标准登录和集成登录来解决在运行 SQL Server 的服务器之间移动数据库时的权限问题。更多信息当您将数据库从一个运行 SQL Server 的服务器移到另一个运行 SQL Se
----------------------------------------问题:该用户与可信的SQL SERVER 连接无关联使用sa用户或自建用户使用“SQL SERVER 身份认证”连接数据
更新日期: 2007 年 5 月 20 日 使用下表可以确定各种版本的 Microsoft SQL Server 2005 支持哪些功能。有关 SQL Server 2005 Enterprise E
当从Excel导入数据到Sql Sever中,可能会出现以下问题:
对于指定的缓冲区大小而言,源列的数据太大
使用SQL Server 2005 命名数据库对象时可以参照微软的示例数据库AdventureWorks。其次可以参照以下内容:Database Naming Conventions Version
方法一:--生成数据库脚本的方法最快,处理的也最好 sql2000企业管理器 --右键要清理的数据库 --所有任务 --生成SQL脚本 --里选择"生成全部对象脚本"",
INTRODUCTION本文介绍如何不同服务器上的 Microsoft SQL Server 2005 实例之间传输登录和密码。本文, 服务器 A 和服务器 B 是不同的服务器。 此外, 服务器 A
TinySQL Code Generatorfrom: http://weblogs.asp.net/firoz/archive/2007/09/13/tinysql-code-generator.a
通常情况下,SQL Server里面的生成SQL脚本,只会包含数据库及表的字段结构,而不会包含表的数据,也就是SQL脚本里面只有Create database,Create table 这样的语句,没
SQL Server 2005 行列转换有用SQL写过交叉报表的,往往都比较头痛,还好现在SQL2005中提供了新的PIVOT操作符,可以很简单地写出交叉数据查询。正好前两天在研究ORACLE最新的1
错误信息: Server Error in '/xxxxx' Application.Timeout expired. The timeout period elapsed prior