免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4370 | 回复: 1

如何通过使用Detach和Attach函数将SQL Server数据库移到新位置(转自MS SITE) [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2009-09-26 16:42 |显示全部楼层
写在前面的话:\r\n本来觉得这个东西和存储备份没什么直接联系的,但是考虑到很多新手们在上新存储的时候,难免碰到数据迁移的事情,所以转出来大家看一下,知道一下基本流程,心里有个准备\r\n\r\n概要\r\n本文描述如何更改任何 SQL Server 7.0、SQL Server 2000 或 SQL Server 2005 数据库的数据和日志文件的位置。\r\n\r\n更多信息\r\n更改某些 SQL Server 系统数据库的位置必须遵循的步骤与更改用户数据库的位置必须遵循的步骤不同。将分别对这些特殊情况给予说明。\r\n注意:SQL Server 7.0 系统数据库与 SQL Server 2000 不兼容。不要将 SQL Server 7.0 master、model、msdb 或分发数据库附加到 SQL Server 2000。如果您使用的是 SQL Server 2005,则只能将 SQL Server 2005 数据库附加到一个实例。\r\n本文的所有示例都假设 SQL Server 安装在 D:\\Mssql7 目录中,而且所有数据库和日志文件都位于默认目录 D:\\Mssql7\\Data 中。这些示例将所有数据库的数据和日志文件都移到 E:\\Sqldata。\r\n\r\n先决条件\r\n从数据库的当前位置备份当前所有数据库,尤其是 master 数据库。\r\n必须具有系统管理员 (sa) 权限。\r\n必须知道数据库的所有数据文件和日志文件的名称及当前位置。\r\n\r\n注意:可以使用存储过程 sp_helpfile 来确定数据库所使用的所有文件的名称和当前位置:\r\nuse <database_name>\r\ngo\r\nsp_helpfile\r\ngo\r\n应可以以独占方式访问被移动的数据库。如果在此过程中出现问题并且无法访问已经移动的数据库,或无法启动 SQL Server,则需要查看 SQL Server 错误日志和 SQL Server 联机丛书以获取这些错误的更多信息。\r\n\r\n移动用户数据库\r\n以下示例将移动一个名为 mydb 的数据库,该数据库包含一个数据文件 Mydb.mdf 和一个日志文件 Mydblog.ldf。如果您要移动的数据库还有其他数据或日志文件,请在存储过程 sp_attach_db 中用一个逗号分隔的列表将它们全部列出。无论数据库包含多少文件,存储过程 sp_detach_db 都不会更改,原因是它不会列出这些文件。 \r\n按如下所示分离数据库:\r\nuse master\r\n   go\r\n   sp_detach_db \'mydb\'\r\n   go\r\n然后,将数据和日志文件从当前位置 (D:\\Mssql7\\Data) 复制到新位置 (E:\\Sqldata)。\r\n按如下所示重新附加指向新位置中这些文件的数据库:\r\nuse master\r\n  go\r\n  sp_attach_db \'mydb\',\'E:\\Sqldata\\mydbdata.mdf\',\'E:\\Sqldata\\mydblog.ldf\'\r\n  go\r\n使用 sp_helpfile 确认文件位置的更改:\r\nuse mydb\r\n   go\r\n   sp_helpfile\r\n   go\r\nfilename 列的值应当反映出新的位置。\r\n\r\n移动 pubs 和 Northwind\r\n使用与移动用户数据库相同的步骤。\r\n\r\n移动 MSDB (SQL Server 7.0)\r\n注意:如果您在移动 msdb 和 model 数据库的同时结合使用此过程,则重新附加的顺序必须首先是 model,然后是 msdb。如果首先重新附加的是 msdb,则必须将它分离,等到附加完 model 后再重新附加。 \r\n确保 SQL Server 代理当前没有运行。\r\n使用与移动用户数据库相同的步骤。\r\n注意:如果 SQL Server 代理正在运行,则 sp_detach_db 存储过程将会失败,并返回以下消息:\r\n服务器:消息 3702,级别 16,状态 1,行 0\r\n无法删除数据库 \'msdb\',因为该数据库当前正在使用。\r\nDBCC 执行完毕。如果 DBCC 输出了错误消息,请与系统管理员联系。\r\n\r\n移动 MSDB 数据库(SQL Server 2000 和 SQL Server 2005)\r\n注意:如果您在移动 msdb 和 model 数据库的同时结合使用此过程,则重新附加的顺序必须首先是 model,然后是 msdb。如果首先重新附加的是 msdb,则必须将它分离,等到附加完 model 后再重新附加。\r\n\r\n在 SQL Server 2000 和 SQL Server 2005 中,不能使用 sp_detach_db 存储过程分离系统数据库。运行 sp_detach_db \'msdb\' 将会失败并返回以下消息:\r\n服务器:消息 7940,级别 16,状态 1,行 1\r\n无法分离系统数据库 master、model、msdb 和 tempdb。\r\n要在 SQL Server 2000 上移动 MSDB 数据库,请按照下列步骤操作: \r\n在 SQL Server 企业管理器中,右键单击服务器名,然后单击属性。\r\n在常规选项卡上,单击启动参数。\r\n添加一个新参数“-T3608”(不带引号)。\r\n添加跟踪标记 3608 后,按照下列步骤操作: \r\n停止并重新启动 SQL Server。\r\n确保 SQL Server 代理服务当前没有运行。\r\n按如下所示分离 msdb 数据库:\r\nuse master\r\ngo\r\nsp_detach_db \'msdb\'\r\ngo\r\n将 Msdbdata.mdf 和 Msdblog.ldf 文件从当前位置 (D:\\Mssql8\\Data) 移到新位置 (E:\\Mssql8\\Data)。\r\n在企业管理器中,从启动参数框中删除 -T3608 跟踪标记。\r\n停止并重新启动 SQL Server。\r\n按如下所示重新附加 MSDB 数据库:\r\nuse master\r\ngo \r\nsp_attach_db \'msdb\',\'E:\\Mssql8\\Data\\msdbdata.mdf\',\'E:\\Mssql8\\Data\\msdblog.ldf\' \r\ngo\r\n注意:如果您试图通过使用跟踪标记 -T3608 启动 SQL Server 来重新附加 msdb 数据库,会收到以下错误:\r\n服务器:消息 615,级别 21,状态 1,行 1\r\n未能找到 ID 为 3,名称为 \'model\' 的数据库表。\r\n如果您使用的是 SQL Server 2005\r\n可以使用 SQL Server 配置管理器来更改 SQL Server 服务的启动参数。有关如何更改启动参数的更多信息,请访问以下 Microsoft Developer Network 网站:\r\nhttp://msdn2.microsoft.com/zh-cn/library/ms190737.aspx (http://msdn2.microsoft.com/zh-cn/library/ms190737.aspx) \r\n移动 MSDB 数据库后,可能会收到以下错误消息:\r\n错误 229:拒绝了对对象 \'ObjectName\' (数据库 \'master\',所有者 \'dbo\')的执行权限。\r\n发生此问题的原因是所有权链断裂。MSDB 数据库和 master 数据库的所有者不相同。因此,MSDB 数据库的所有权已经发生更改。要解决此问题,请在 Isql.exe 命令行实用工具或 Osql.exe 命令行实用工具中运行以下命令:\r\nUSE MSDB\r\nGo\r\nEXEC sp_changedbowner \'sa\'\r\nGo\r\n有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: \r\n272424  (http://support.microsoft.com/kb/272424/ ) INF:数据库范围内的对象所有权链检查取决于映射至对象所有者的登录信息 \r\n\r\n移动 master 数据库\r\n\r\n在 SQL Server 企业管理器中,更改 master 数据和日志文件的路径。\r\n\r\n注意:您也可以在此更改错误日志的位置。\r\n在企业管理器中,右键单击 SQL Server,然后单击属性。\r\n单击启动参数,将会显示以下条目:\r\n-dD:\\MSSQL7\\data\\master.mdf\r\n-eD:\\MSSQL7\\log\\ErrorLog\r\n-lD:\\MSSQL7\\data\\mastlog.ldf\r\n-d 是 master 数据库数据文件的完全限定路径。\r\n\r\n-e 是错误日志文件的完全限定路径。\r\n\r\n-l 是 master 数据库日志文件的完全限定路径。\r\n按如下所示更改这些值: \r\n删除 Master.mdf 和 Mastlog.ldf 文件的当前条目。\r\n添加指定新位置的新条目:\r\n-dE:\\SQLDATA\\master.mdf\r\n-lE:\\SQLDATA\\mastlog.ldf\r\n停止 SQL Server。\r\n将 Master.mdf 和 Mastlog.ldf 文件复制到新位置 (E:\\Sqldata)。\r\n重新启动 SQL Server。\r\n\r\n移动 model 数据库\r\n\r\n要移动 model 数据库,必须用跟踪标记 3608 启动 SQL Server,这样它不会恢复除 master 之外的任何数据库。\r\n\r\n注意:此时,您不能立即访问任何用户数据库。使用此跟踪标记时,除下列步骤外,不要执行其他任何操作。要将跟踪标记 3608 添加为 SQL Server 启动参数,请按照下列步骤操作: \r\n在 SQL Server 企业管理器中,右键单击服务器名,然后单击“属性”。\r\n在“常规”选项卡上,单击“启动参数”。\r\n添加一个新参数“-T3608”(不带引号)。\r\n\r\n添加跟踪标记 3608 后,按照下列步骤操作: \r\n停止并重新启动 SQL Server。\r\n按如下所示分离“model”数据库:\r\nuse master\r\n   go\r\n   sp_detach_db \'model\'\r\n   go\r\n将 Model.mdf 和 Modellog.ldf 文件从 D:\\Mssql7\\Data 移到 E:\\Sqldata。\r\n按如下所示重新附加 model 数据库:\r\nuse master\r\n   go\r\n   sp_attach_db \'model\',\'E:\\Sqldata\\model.mdf\',\'E:\\Sqldata\\modellog.ldf\'\r\n   go\r\n在企业管理器中,从启动参数框中删除 -T3608 跟踪标记。\r\n停止并重新启动 SQL Server。您可以使用 sp_helpfile 确认文件位置的更改:\r\nuse model\r\n   go\r\n   sp_helpfile\r\n   go\r\n\r\n移动 tempdb\r\n\r\n您可以使用 ALTER DATABASE 语句来移动 tempdb 文件。 \r\n按如下所示使用 sp_helpfile 确定 tempdb 数据库的逻辑文件名:\r\nuse tempdb\r\ngo\r\nsp_helpfile\r\ngo\r\n每个文件的逻辑名均包含在名称列中。该示例使用了默认文件名 tempdev 和 templog。\r\n按如下所示使用 ALTER DATABASE 语句指定逻辑文件名:\r\nuse master\r\ngo\r\nAlter database tempdb modify file (name = tempdev, filename = \'E:\\Sqldata\\tempdb.mdf\')\r\ngo\r\nAlter database tempdb modify file (name = templog, filename = \'E:\\Sqldata\\templog.ldf\')\r\ngo\r\n应当收到以下确认更改的消息:\r\n文件“tempdev”在 sysaltfiles 中被修改。重新启动 SQL Server 后会删除旧文件。\r\n\r\n文件“templog”在 sysaltfiles 中被修改。重新启动 SQL Server 后会删除旧文件。\r\n在 tempdb 中使用 sp_helpfile 将会在重新启动 SQL Server 后才确认这些更改。\r\n停止并重新启动 SQL Server。\r\n\r\n参考\r\n有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: \r\n274188  (http://support.microsoft.com/kb/274188/ ) PRB:联机丛书中的“孤立用户疑难解答”主题不完整 \r\n246133  (http://support.microsoft.com/kb/246133/ ) 如何在 SQL Server 实例之间传输登录和密码 \r\n168001  (http://support.microsoft.com/kb/168001/ ) 还原数据库后数据库上的用户登录和权限可能不正确 \r\n\r\n有关更多信息,请参阅下列书籍:\r\nMicrosoft Corporation\r\nMicrosoft SQL Server 7.0 System Administration Training Kit\r\nMicrosoft Press, 2001\r\n\r\nMicrosoft Corporation\r\nMCSE Training Kit:Microsoft SQL Server 2000 System Administration (http://www.microsoft.com/MSPress/books/4885.asp) \r\nMicrosoft Press, 2001\r\n\r\nMicrosoft Corporation\r\nMicrosoft SQL Server 2000 Resource Kit (http://www.microsoft.com/MSPress/books/4939.asp) \r\nMicrosoft Press, 2001\r\n--------------------------------------------------------------------------------\r\n\r\n这篇文章中的信息适用于:\r\nMicrosoft SQL Server 7.0 标准版\r\nMicrosoft SQL Server 2000 标准版\r\nMicrosoft SQL Server 2005 Standard Edition\r\nMicrosoft SQL Server 2005 Express Edition\r\nMicrosoft SQL Server 2005 Developer Edition\r\nMicrosoft SQL 2005 Server Enterprise\r\nMicrosoft SQL 2005 Server Workgroup\r\n\r\n关键字:   kbinfo KB224071\n\n[ 本帖最后由 yddll 于 2009-9-26 16:46 编辑 ]

论坛徽章:
0
发表于 2009-09-27 00:05 |显示全部楼层
你是弄出来鄙视bbjjmm吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。




----------------------------------------

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP