如何通过使用 SQL Server 中的 Detach 和 Attach 函数将 SQL Server 数据库移到新位置(转载)

2023-11-10

(载自http://support.microsoft.com/kb/224071/zh-cn)

如何通过使用 SQL Server 中的 Detach 和 Attach 函数将 SQL Server 数据库移到新位置

参考
概要
本文描述如何更改任何 SQL Server 7.0、SQL Server 2000 或 SQL Server 2005 数据库的数据和日志文件的位置。


更改某些 SQL Server 系统数据库的位置必须遵循的步骤与更改用户数据库的位置必须遵循的步骤不同。将分别对这些特殊情况给予说明。
注意:SQL Server 7.0 系统数据库与 SQL Server 2000 不兼容。不要将 SQL Server 7.0 master、model、msdb 或分发数据库附加到 SQL Server 2000。如果您使用的是 SQL Server 2005,则只能将 SQL Server 2005 数据库附加到一个实例。
本文的所有示例都假设 SQL Server 安装在 D:/Mssql7 目录中,而且所有数据库和日志文件都位于默认目录 D:/Mssql7/Data 中。这些示例将所有数据库的数据和日志文件都移到 E:/Sqldata。


先决条件
• 从数据库的当前位置备份当前所有数据库,尤其是 master 数据库。
• 必须具有系统管理员 (sa) 权限。
• 必须知道数据库的所有数据文件和日志文件的名称及当前位置。

注意:可以使用存储过程 sp_helpfile 来确定数据库所使用的所有文件的名称和当前位置:use <database_name>
go
sp_helpfile
go
 
• 应可以以独占方式访问被移动的数据库。如果在此过程中出现问题并且无法访问已经移动的数据库,或无法启动 SQL Server,则需要查看 SQL Server 错误日志和 SQL Server 联机丛书以获取这些错误的更多信息。

 

移动用户数据库
以下示例将移动一个名为 mydb 的数据库,该数据库包含一个数据文件 Mydb.mdf 和一个日志文件 Mydblog.ldf。如果您要移动的数据库还有其他数据或日志文件,请在存储过程 sp_attach_db 中用一个逗号分隔的列表将它们全部列出。无论数据库包含多少文件,存储过程 sp_detach_db 都不会更改,原因是它不会列出这些文件。 1. 按如下所示分离数据库:use master
   go
   sp_detach_db 'mydb'
   go
 
2. 然后,将数据和日志文件从当前位置 (D:/Mssql7/Data) 复制到新位置 (E:/Sqldata)。
3. 按如下所示重新附加指向新位置中这些文件的数据库:use master
  go
  sp_attach_db 'mydb','E:/Sqldata/mydbdata.mdf','E:/Sqldata/mydblog.ldf'
  go
使用 sp_helpfile 确认文件位置的更改:use mydb
   go
   sp_helpfile
   go
filename 列的值应当反映出新的位置。

 

移动 pubs 和 Northwind
使用与移动用户数据库相同的步骤。


移动 MSDB (SQL Server 7.0)
注意:如果您在移动 msdb 和 model 数据库的同时结合使用此过程,则重新附加的顺序必须首先是 model,然后是 msdb。如果首先重新附加的是 msdb,则必须将它分离,等到附加完 model 后再重新附加。 1. 确保 SQL Server 代理当前没有运行。
2. 使用与移动用户数据库相同的步骤。
注意:如果 SQL Server 代理正在运行,则 sp_detach_db 存储过程将会失败,并返回以下消息:
服务器:消息 3702,级别 16,状态 1,行 0
无法删除数据库 'msdb',因为该数据库当前正在使用。
DBCC 执行完毕。如果 DBCC 输出了错误消息,请与系统管理员联系。


移动 MSDB 数据库(SQL Server 2000 和 SQL Server 2005)
注意:如果您在移动 msdb 和 model 数据库的同时结合使用此过程,则重新附加的顺序必须首先是 model,然后是 msdb。如果首先重新附加的是 msdb,则必须将它分离,等到附加完 model 后再重新附加。

在 SQL Server 2000 和 SQL Server 2005 中,不能使用 sp_detach_db 存储过程分离系统数据库。运行 sp_detach_db 'msdb' 将会失败并返回以下消息:
服务器:消息 7940,级别 16,状态 1,行 1
无法分离系统数据库 master、model、msdb 和 tempdb。
要在 SQL Server 2000 上移动 MSDB 数据库,请按照下列步骤操作: 1. 在 SQL Server 企业管理器中,右键单击服务器名,然后单击属性。
2. 在常规选项卡上,单击启动参数。
3. 添加一个新参数“-T3608”(不带引号)。
添加跟踪标记 3608 后,按照下列步骤操作: 1. 停止并重新启动 SQL Server。
2. 确保 SQL Server 代理服务当前没有运行。
3. 按如下所示分离 msdb 数据库:use master
go
sp_detach_db 'msdb'
go
 
4. 将 Msdbdata.mdf 和 Msdblog.ldf 文件从当前位置 (D:/Mssql8/Data) 移到新位置 (E:/Mssql8/Data)。
5. 在企业管理器中,从启动参数框中删除 -T3608 跟踪标记。
6. 停止并重新启动 SQL Server。
7. 按如下所示重新附加 MSDB 数据库:use master
go
sp_attach_db 'msdb','E:/Mssql8/Data/msdbdata.mdf','E:/Mssql8/Data/msdblog.ldf'
go
注意:如果您试图通过使用跟踪标记 -T3608 启动 SQL Server 来重新附加 msdb 数据库,会收到以下错误:
服务器:消息 615,级别 21,状态 1,行 1
未能找到 ID 为 3,名称为 'model' 的数据库表。

 

如果您使用的是 SQL Server 2005
可以使用 SQL Server 配置管理器来更改 SQL Server 服务的启动参数。有关如何更改启动参数的更多信息,请访问以下 Microsoft Developer Network 网站:
http://msdn2.microsoft.com/zh-cn/library/ms190737.aspx (http://msdn2.microsoft.com/zh-cn/library/ms190737.aspx)
移动 MSDB 数据库后,可能会收到以下错误消息:
错误 229:拒绝了对对象 'ObjectName' (数据库 'master',所有者 'dbo')的执行权限。
发生此问题的原因是所有权链断裂。MSDB 数据库和 master 数据库的所有者不相同。因此,MSDB 数据库的所有权已经发生更改。要解决此问题,请在 Isql.exe 命令行实用工具或 Osql.exe 命令行实用工具中运行以下命令:
USE MSDB
Go
EXEC sp_changedbowner 'sa'
Go
有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
272424 (http://support.microsoft.com/kb/272424/) INF:数据库范围内的对象所有权链检查取决于映射至对象所有者的登录信息


移动 master 数据库
1. 在 SQL Server 企业管理器中,更改 master 数据和日志文件的路径。

注意:您也可以在此更改错误日志的位置。
2. 在企业管理器中,右键单击 SQL Server,然后单击属性。
3. 单击启动参数,将会显示以下条目:-dD:/MSSQL7/data/master.mdf
-eD:/MSSQL7/log/ErrorLog
-lD:/MSSQL7/data/mastlog.ldf
-d 是 master 数据库数据文件的完全限定路径。

-e 是错误日志文件的完全限定路径。

-l 是 master 数据库日志文件的完全限定路径。
4. 按如下所示更改这些值: a.  删除 Master.mdf 和 Mastlog.ldf 文件的当前条目。
b.  添加指定新位置的新条目:-dE:/SQLDATA/master.mdf
-lE:/SQLDATA/mastlog.ldf
 
 
5. 停止 SQL Server。
6. 将 Master.mdf 和 Mastlog.ldf 文件复制到新位置 (E:/Sqldata)。
7. 重新启动 SQL Server。

 

移动 model 数据库
要移动 model 数据库,必须用跟踪标记 3608 启动 SQL Server,这样它不会恢复除 master 之外的任何数据库。

注意:此时,您不能立即访问任何用户数据库。使用此跟踪标记时,除下列步骤外,不要执行其他任何操作。要将跟踪标记 3608 添加为 SQL Server 启动参数,请按照下列步骤操作: 1. 在 SQL Server 企业管理器中,右键单击服务器名,然后单击“属性”。
2. 在“常规”选项卡上,单击“启动参数”。
3. 添加一个新参数“-T3608”(不带引号)。

添加跟踪标记 3608 后,按照下列步骤操作: 1. 停止并重新启动 SQL Server。
2. 按如下所示分离“model”数据库:use master
   go
   sp_detach_db 'model'
   go
 
3. 将 Model.mdf 和 Modellog.ldf 文件从 D:/Mssql7/Data 移到 E:/Sqldata。
4. 按如下所示重新附加 model 数据库:use master
   go
   sp_attach_db 'model','E:/Sqldata/model.mdf','E:/Sqldata/modellog.ldf'
   go
 
5. 在企业管理器中,从启动参数框中删除 -T3608 跟踪标记。
6. 停止并重新启动 SQL Server。您可以使用 sp_helpfile 确认文件位置的更改:use model
   go
   sp_helpfile
   go
 

 

移动 tempdb
您可以使用 ALTER DATABASE 语句来移动 tempdb 文件。 1. 按如下所示使用 sp_helpfile 确定 tempdb 数据库的逻辑文件名:use tempdb
go
sp_helpfile
go
每个文件的逻辑名均包含在名称列中。该示例使用了默认文件名 tempdev 和 templog。
2. 按如下所示使用 ALTER DATABASE 语句指定逻辑文件名:use master
go
Alter database tempdb modify file (name = tempdev, filename = 'E:/Sqldata/tempdb.mdf')
go
Alter database tempdb modify file (name = templog, filename = 'E:/Sqldata/templog.ldf')
go
应当收到以下确认更改的消息:
文件“tempdev”在 sysaltfiles 中被修改。重新启动 SQL Server 后会删除旧文件。

文件“templog”在 sysaltfiles 中被修改。重新启动 SQL Server 后会删除旧文件。
3. 在 tempdb 中使用 sp_helpfile 将会在重新启动 SQL Server 后才确认这些更改。
4. 停止并重新启动 SQL Server。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过使用 SQL Server 中的 Detach 和 Attach 函数将 SQL Server 数据库移到新位置(转载) 的相关文章

  • 我将 MySQL 列设置为“NOT NULL”,但我仍然可以插入空值

    在 MySQL 中 我有一个 Column1 为 NOT NULL 的表 create table myTable Column1 int not null Column2 int not null 我仍然可以像这样插入一个空值 INSER
  • C# IEnumerator/yield 结构可能不好?

    背景 我从数据库中获取了一堆字符串 我想返回它们 传统上 它会是这样的 public List
  • Java - 如何批量插入和更新数据库

    我想在一个PreparedStatement 中批量处理多种类型的数据库调用 这可能吗 有没有办法做类似的事情 PreparedStatement pstmt connection prepareStatement 哪里的 可以是INSER
  • PHP - 解析具有固定列宽的文本文件

    我是 PHP 和 Laravel 的新手 我需要打开文件并解析内容以将它们传递到数据库 文本文件具有固定的列宽 它没有分隔符或标题 我认为使用子字符串并将每个子字符串分配给变量将是正确的方法 但我仍在学习该语言的过程中 我不知道如何实现这一
  • 在 SQLAlchemy 中选择 NULL 值

    这是我的 PostgreSQL 表 test gt create table people name varchar primary key marriage status varchar test gt insert into peopl
  • 数组 (UUID[ ]) 会破坏 1NF 吗?

    我的问题是包含 UUID 数组的字段是否会破坏范式 http en wikipedia org wiki Database normalization 在包含数组之前位于 NF 中的表中 原表 CREATE TABLE Floor Floo
  • 同步2个具有不同模式的数据库

    我们有一个使用通用表设计的标准化 SQL Server 2008 数据库 因此 我们没有为每个实体 例如产品 订单 订单项等 使用单独的表 而是使用通用表 实体 实例 关系 属性等 我们决定建立一个单独的非规范化数据库来快速检索数据 您能否
  • 如何打开sqlite数据库并将其转换为pandas dataframe

    我已经下载了一些数据作为 sqlite 数据库 data db 我想在 python 中打开这个数据库 然后将其转换为 pandas 数据框 这是到目前为止我所做的 import sqlite3 import pandas dat sqli
  • 在实时计算机上更新(或替换)整个数据库表的最佳方法是什么?

    我每周都会收到一个数据源 我将对其进行解析并放入数据库中 数据每周不会有太大变化 但我应该定期更新数据库 除了每周更新外 数据是静态的 目前重建整个数据库不是问题 但最终该数据库将上线 人们可以在我重建数据库时查询该数据库 数据量并不小 几
  • 一个大连接或多个查询哪个提供更好的性能?

    我有一个名为订单的表 订单上的一列是 customer id我有一个名为 customers 的表 有 10 个字段 给定两个选项 如果我想构建订单对象数组并嵌入订单对象中的是客户对象 我有两个选择 选项1 A 首先查询订单表 b 循环遍历
  • Hibernate 乐观锁..它是如何工作的?

    我正在阅读下面关于休眠乐观锁定的博客 我打算将它与休眠一起使用 但是 我有一个担忧 我们有java代码和c 代码 都连接到一个数据库 虽然java代码可以使用hibernate来实现乐观锁定 但我想让c 代码做同样的事情 此外 C 代码正在
  • 如何在postgresql中查找具有特定列的表

    我正在使用 PostgreSQL 9 1 我有一个表的列名 是否可以找到具有此列的表 如果是这样 怎么办 你也可以做 select table name from information schema columns where colum
  • DB2连接授权失败原因:Java不支持安全机制

    我正在尝试使用 DB2JDBC Type4 驱动程序配置 DB2 连接 但我收到这个错误 线程 main 中的异常 com ibm db2 jcc am SqlInvalidAuthorizationSpecException jcc t4
  • Elasticsearch 聚合过滤器

    因为我在谷歌上找不到任何东西 是否可以在elasticsearch中过滤聚合 我正在考虑这样的事情 获取 SOME object X gt 100 的所有对象 提前致谢 编辑 样本数据 我有以下文档结构 docKey 1 value 2 d
  • PostgreSQL 中字符串列类型的索引数组

    是否可以在类型为的列上创建索引文本数组 尝试使用GIN索引 但查询似乎没有使用这些索引 Example CREATE TABLE users name VARCHAR 100 groups TEXT Query SELECT name FR
  • 对于数据库来说,选择正确的数据类型会影响性能吗?

    如果是这样 为什么 我的意思是 tinyint 的搜索速度比 int 快吗 如果是这样 性能上的实际差异是什么 是的 根据数据类型 它确实有所不同 int vs tinyint不会在速度上产生明显的差异 但会在数据大小上产生差异 假设tin
  • 如何在 PostgreSQL 中将数据库从一台服务器移动到另一台服务器?

    我正在尝试将数据库从旧服务器移动到新服务器 任何帮助 将不胜感激 Just pipe http www postgresql org docs current interactive migration html从旧服务器转储到新服务器 p
  • fetchsize和batchsize对Spark的影响

    我想通过以下方式控制 RDB 的读写速度Spark直接 但标题已经透露的相关参数似乎不起作用 我可以得出这样的结论吗fetchsize and batchsize我的测试方法不起作用 或者它们确实会影响阅读和写作方面 因为测量结果基于规模是
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 如何在列上创建外键,该列的每条记录都可能引用多个表之一中的列?

    我正在创建一个社交网络 它有新闻 照片等多个实体 可以有评论 由于所有评论都具有相同的列并且行为方式相同 唯一的区别是它们的类型 新闻 照片或将来添加的其他内容 我决定为所有评论创建一个表 其中的列名为type 它工作得很好 直到我决定将外

随机推荐

  • 每日一道Leetcode——按奇偶排序数组II

    题目 我的解法一 双端队列 思路 用两个双端队列分别存储奇数和偶数 然后依次取一个 class Solution public int sortArrayByParityII int A Deque
  • 拓世AI

    2023年的小红书 发展趋势依旧昂扬向上 最新数据显示 小红书拥有逾3亿的月活用户 且超过80 的用户集中在20 30岁年龄段 这代表什么 广大的年轻用户基数和消费能力 正处于购买力上升期的年轻人 是品牌最想抓住的目标用户 巨大的红利吸引了
  • Visual C# 2010 实现菜单项和状态栏

    演练 向窗体提供标准菜单项 Visual Studio 2010 其他版本 此主题尚未评级 评价此主题 可以通过 MenuStrip 控件为窗体提供标准菜单 此演练演示如何使用 MenuStrip 控件创建标准菜单 窗体还将在用户选择菜单项
  • karatsuba大数乘法问题及其高效算法

    转载自 iTimeTraveler博客 题目 编写两个任意位数的大数相乘的程序 给出计算结果 比如 题目描述 输出两个不超过100位的大整数的乘积 输入 输入两个大整数 如1234567 和 123 输出 输出乘积 如 151851741
  • arcgis应用程序无法正常启动0xc0000906

    第一 在开始 运行里输入CMD确定 在命令行窗口下输入以下内容后按回车for 1 in windir system32 ocx do regsvr32 s 1完了后 再输入以下内容并回车 第二 再输入以下内容并回车for 1 in wind
  • Android 代码混淆语法讲解及常用模板,app架构图

    keepclassmembers class R public static 表示不混淆 R 类中 的 static 变量 在 R 类中 这些资源 ID 是系统自动帮我们生成的 混淆了就无法找到相应的资源 dontwarn android
  • VUE 之 项目常规配置详解

    Vue 项目的常规配置可以分为以下几个方面 路由配置 使用 Vue Router 进行路由配置 需要在 src router index js 文件中配置路由表和路由守卫 状态管理 使用 Vuex 进行状态管理 需要在 src store
  • C++多线程:thread_local

    概念 首先thread local是一个关键词 thread local是C 11新引入的一种存储期指定符 它会影响变量的存储周期 Storage duration 与它同是存储期指定符的还有以下几个 关键字 说明 备注 auto 自动存储
  • new详解

    new int和new int 内置类型 对于int内置类型 new仅仅只是分配内存 除非后面显示加 相当于调用它的构造函数 int p new int 10 10个未初始化的int int p2 new int 10 10个值初始化为0的
  • 异步调用的四种方法

    异步调用的四种方法 我们都知道普通方法运行是单线程的 如果中途有大型操作都会导致方法阻塞 表现在界面上就是 程序卡或者死掉 界面元素不动了 不响应了 C 异步调用是很好的解决方法 异步执行某个方法 程序立即开辟一个新线程去运行你的方法 主线
  • 【ES6】var、let、const三者的区别

    首先 一个常见的问题是 ECMAScript 和 JavaScript 到底是什么关系 ECMAScript是一个国际通过的标准化脚本语言 JavaScript由ECMAScript和DOM BOM三者组成 可以简单理解为 ECMAScri
  • Java反射机制及Method.invoke详解

    这篇文章主要介绍了Java反射机制及Method invoke详解 本文讲解了JAVA反射机制 得到某个对象的属性 得到某个类的静态属性 执行某对象的方法 执行某个类的静态方法等内容 需要的朋友可以参考下 JAVA反射机制 JAVA反射机制
  • hackthebox的网站使用教程

    Google浏览器下载 下载url https www google cn chrome hackthebox网站 网站url https www hackthebox com home 获取验证码注册教程 网站url https blog
  • 运用打分和Boost优化Elasticsearch搜索结果

    来自Optimizing Search Results in Elasticsearch with Scoring and Boosting 作者 Neil Alex 2015 03 18 虽然es提供了高效的打分函数 但是在电商环境下还是
  • python趣味编程-扫雷游戏

    在上一期我们用Python实现了一个弹跳球的游戏 这一期我们继续使用Python实现一个简单的弹跳球游戏 让我们开始今天的旅程吧 Python中的扫雷游戏GUI免费源代码 这 Python中的扫雷游戏GUI免费源代码 是一个以 python
  • UE4 List View 在蓝图中的使用

    在使用中遇到的问题 蓝图中调用userListEntry 接口的IsListItemSelected IsListItemExpanded GetOwningListView 函数 均会崩溃 一 创建用作item显示的 控件蓝图 命名为 l
  • redis-cli 利用管道批量导入MySQL数据到Redis

    前言 因为公司业务的需要 需要快速的将mysql的中的数据查询导入到redis中 程序遍历MySQL然后插入Redis 效率极低 利用redis cli命令行工具有一个批量插入模式 是专门为批量执行命令设计的 可以把Mysql查询的内容格式
  • JS操作字符串方法学习系列(1)-每天学习10个方法

    目录 字符串连接 Concatenation 字符串长度 Length 字符串查找 Search 字符串替换 Replace 字符串分割 Split 字符串大小写转换 Case Conversion 字符串切片 Slice 字符串删除空白
  • 校园二手市场交易平台(JAVA,SSM,BOOTSTRAP,JSP,AJAX,MYSQL)

    今天 我们发布一套 校园二手市场交易 系统使用技术包含JAVA SSM BOOTSTRAP JSP AJAX MYSQL 这套系统后台框架使用SSM 前台框架为BOOTSTRAP 数据库使用MySql 这套系统包含完整的源代码和数据库脚本
  • 如何通过使用 SQL Server 中的 Detach 和 Attach 函数将 SQL Server 数据库移到新位置(转载)

    载自http support microsoft com kb 224071 zh cn 如何通过使用 SQL Server 中的 Detach 和 Attach 函数将 SQL Server 数据库移到新位置 参考概要本文描述如何更改任何