SQL Server 移动数据库
移动系统数据库在下列情况下可能很有用:
- 故障恢复。例如,数据库处于可疑模式下或因硬件故障而关闭。 
- 计划的重定位。 
- 为预定的磁盘维护操作而进行的重定位。 
下列过程适用于在同一 SQL Server 实例内移动数据库文件。若要将数据库移动另一个 SQL Server 实例中或另一台服务器上,请使用备份和还原或分离和附加操作。
本主题中的过程需要数据库文件的逻辑名称。若要获取该名称,请在 sys.master_files 目录视图中查询名称列。
若要将移动系统数据库数据或日志文件的操作作为预先安排的重定位或预定的维护操作的一部分,请执行下列步骤。此过程适用于除 master 和 Resource 数据库以外的所有系统数据库。
- 对于要移动的每个文件,请运行以下语句。 - ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' ) 
- 停止 SQL Server 实例或关闭系统以执行维护。有关详细信息,请参阅停止服务。 
- 将文件移动到新位置。 
- 重新启动 SQL Server 实例或服务器。有关详细信息,请参阅启动和重新启动服务。 
- 通过运行以下查询来验证文件更改。 - SELECT name , 
 physical_name AS CurrentLocation ,
 state_desc
 FROM sys.master_files
 WHERE database_id = DB_ID(N'<database_name>') ;
如果移动了 msdb 数据库并为数据库邮件配置了 SQL Server 实例,则请完成下列附加步骤。
- 通过运行以下查询,验证是否已为 msdb 数据库启用 Service Broker。 - SELECT is_broker_enabled 
 FROM sys.databases
 WHERE name = N'msdb' ;- 有关启用 Service Broker 的详细信息,请参阅 ALTER DATABASE (Transact-SQL)。 
- 通过发送测试邮件验证数据库邮件是否正常运行。有关详细信息,请参阅对数据库邮件进行故障排除。 
如果由于硬件故障而必须移动文件,则请执行下列步骤,将文件重新定位到一个新位置。此过程适用于除 master 和 Resource 数据库以外的所有系统数据库。
| 重要提示 | 
|---|
| 如果数据库无法启动,即处于可疑模式下或处于未恢复状态,则只有 sysadmin 固定角色的成员才可以移动该文件。 | 
- 如果启动了 SQL Server 实例,则将其停止。 
- 通过在命令提示符下输入下列命令之一,在仅 master 恢复模式下启动 SQL Server 实例。在这些命令中指定的参数区分大小写。如果未按所示方式指定参数,则命令会失败。 - 对于默认的 (MSSQLSERVER) 实例,请运行以下命令: - NET START MSSQLSERVER /f /T3608 
- 对于命名实例,请运行以下命令: - NET START MSSQL$instancename /f /T3608 
 - 有关详细信息,请参阅如何启动 SQL Server 实例(net 命令)。 
- 对于要移动的每个文件,请使用 sqlcmd 命令或 SQL Server Management Studio 运行以下语句。 - ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' ) - 有关使用 sqlcmd 实用工具的详细信息,请参阅使用 sqlcmd 实用工具。 
- 退出 sqlcmd 实用工具或 SQL Server Management Studio。 
- 停止 SQL Server 实例。例如,运行 NET STOP MSSQLSERVER。 
- 将文件移动到新位置。 
- 重新启动 SQL Server 实例。例如,运行 NET START MSSQLSERVER。 
- 通过运行以下查询来验证文件更改。 - SELECT name, physical_name AS CurrentLocation, state_desc 
 FROM sys.master_files
 WHERE database_id = DB_ID(N'<database_name>');
若要移动 master 数据库,请按下列步骤进行操作。
- 在“开始”菜单中,依次指向“所有程序”、Microsoft SQL Server 和“配置工具”,再单击 SQL 
 Server 配置管理器。
- 在“SQL Server 服务”节点中,右键单击 SQL Server 实例(如 SQL Server (MSSQLSERVER)),并选择“属性”。 
- 在“SQL Server (实例名) 属性”对话框中,单击“高级”选项卡。 
- 编辑“引导参数”值以指向 master 数据库数据和日志文件的计划位置,然后单击“确定”。可以选择移动错误日志文件。 - 数据文件的参数值必须跟在 -d 参数的后面,日志文件的参数值必须跟在 -l 参数的后面。下面的示例显示 master 数据和日志文件默认位置的参数值。 - -dC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\ 
 master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\
 LOG\ERRORLOG;-lC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\
 DATA\mastlog.ldf- 如果 master 数据和日志文件预先安排的重定位是 E:\SQLData,则参数值将更改为: - -dE:\SQLData\master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\LOG\ERRORLOG;-lE:\SQLData\mastlog.ldf 
- 通过右键单击实例名称并选择“停止”,停止 SQL Server 实例。 
- 将 master.mdf 和 mastlog.ldf 文件移动到新位置。 
- 重新启动 SQL Server 实例。 
- 通过运行以下查询,验证 master 数据库的文件更改。 - SELECT name, physical_name AS CurrentLocation, state_desc 
 FROM sys.master_files
 WHERE database_id = DB_ID('master');
 GO
Resource 数据库的位置为 <drive>:\Program Files\Microsoft SQL Server\MSSQL10_50.<instance_name>\MSSQL\Binn\。无法移动该数据库。
A. 移动 tempdb 数据库
下面的示例将 tempdb 数据和日志文件移动到一个新位置,作为预先安排的重定位的一部分。
| 注意 | 
|---|
| 由于每次启动 SQL Server 实例时都将重新创建 tempdb,所以不必实际移动数据和日志文件。在步骤 3 中重新启动服务时,将在新位置中创建这些文件。在重新启动服务之前,tempdb 将继续使用现有位置中的数据和日志文件。 | 
- 确定 tempdb 数据库的逻辑文件名称以及在磁盘上的当前位置。 - SELECT name, physical_name AS CurrentLocation 
 FROM sys.master_files
 WHERE database_id = DB_ID(N'tempdb');
 GO
- 使用 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 = 'F:\SQLLog\templog.ldf');
 GO
- 停止再重新启动 SQL Server 的实例。 
- 验证文件更改。 - SELECT name, physical_name AS CurrentLocation, state_desc 
 FROM sys.master_files
 WHERE database_id = DB_ID(N'tempdb');
- 将 tempdb.mdf 和 templog.ldf 文件从其原始位置删除。 - 在 SQL Server 中,通过在 ALTER DATABASE 语句的 FILENAME 子句中指定新的文件位置,可以将用户数据库中的数据、日志和全文目录文件移动到新位置。此方法适用于在同一 SQL Server 实例中移动数据库文件。若要将数据库移动到另一个 SQL Server 
 实例或另一台服务器上,请使用备份和还原或分离和附加操作。- 注意 - SQL Server 数据库引擎的某些功能改变了数据库引擎在数据库文件中存储信息的方式。这些功能仅限于特定的 SQL Server 版本。不能将包含这些功能的数据库移到不支持这些功能的 SQL Server 版本。使用 sys.dm_db_persisted_sku_features 动态管理视图可列出当前数据库中启用的所有特定于版本的功能。 - 本主题中的过程需要数据库文件的逻辑名称。若要获取该名称,请在 sys.master_files 目录视图中查询名称列。 - 注意 - 将数据库移动到另一个服务器实例上时,若要为用户和应用程序提供一致的体验,您可能需要为数据库重新创建部分或全部元数据。有关详细信息,请参阅当数据库在其他服务器实例上可用时管理元数据。 - 若要将移动数据或日志文件作为计划的重定位的一部分,请执行下列步骤: - 运行以下语句。 - ALTER DATABASE database_name SET OFFLINE ; 
- 将文件移动到新位置。 
- 对于已移动的每个文件,请运行以下语句。 - ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' ) ; 
- 运行以下语句。 - ALTER DATABASE database_name SET ONLINE ; 
- 通过运行以下查询来验证文件更改。 - SELECT name , 
 physical_name AS CurrentLocation ,
 state_desc
 FROM sys.master_files
 WHERE database_id = DB_ID(N'<database_name>') ;
 - 若要将重定位文件作为计划的磁盘维护过程的一部分,请执行下列步骤: - 对于要移动的每个文件,请运行以下语句。 - ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' ); 
- 停止 SQL Server 实例或关闭系统以执行维护。有关详细信息,请参阅停止服务。 
- 将文件移动到新位置。 
- 重新启动 SQL Server 实例或服务器。有关详细信息,请参阅启动和重新启动服务。 
- 通过运行以下查询来验证文件更改。 - SELECT name , 
 physical_name AS CurrentLocation ,
 state_desc
 FROM sys.master_files
 WHERE database_id = DB_ID(N'<database_name>') ;
 - 如果由于硬件故障而必须移动文件,则请执行下列步骤,将文件重新定位到一个新位置。 - 重要提示 - 如果数据库无法启动,即处于可疑模式下或处于未恢复状态,则只有 sysadmin 固定角色的成员才可以移动该文件。 - 如果启动了 SQL Server 实例,则将其停止。 
- 通过在命令提示符下输入下列命令之一,在仅 master 恢复模式下启动 SQL Server 实例。 - 对于默认的 (MSSQLSERVER) 实例,请运行以下命令。 - NET START MSSQLSERVER /f /T3608 
- 对于命名实例,请运行以下命令。 - NET START MSSQL$instancename /f /T3608 
 - 有关详细信息,请参阅如何启动 SQL Server 实例(net 命令)。 
- 对于要移动的每个文件,请使用 sqlcmd 命令或 SQL Server Management Studio 运行以下语句。 - ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' ); - 有关如何使用 sqlcmd 实用工具的详细信息,请参阅使用 sqlcmd 实用工具。 
- 退出 sqlcmd 实用工具或 SQL Server Management Studio。 
- 停止 SQL Server 实例。 
- 将文件移动到新位置。 
- 启动 SQL Server 实例。例如,运行 NET START MSSQLSERVER。 
- 通过运行以下查询来验证文件更改。SELECT name, physical_name AS CurrentLocation, state_desc - FROM sys.master_files 
 WHERE database_id = DB_ID(N'<database_name>');
 - 若要移动全文目录,请执行下列步骤。请注意,指定新的目录位置时,只指定 new_path,而不是指定 new_path/os_file_name。 - 运行以下语句。 - ALTER DATABASE database_name SET OFFLINE 
- 将全文目录移动到新位置。 
- 运行下列语句,其中:logical_name 是 sys.database_files 中 name 列的值,new_path 是目录的新位置。 - ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path'); 
- 运行以下语句。 - ALTER DATABASE database_name SET ONLINE; 
 - 另外,也可以使用 CREATE DATABASE 语句的 FOR ATTACH 子句移动全文目录。下面的示例在 AdventureWorks2008R2 数据库中创建一个全文目录。若要将全文目录移动到新位置,请分离 AdventureWorks2008R2 数据库,并将全文目录从物理意义上移动到新位置。然后附加数据库,并指定全文目录的新位置。 - USE AdventureWorks2008R2 ; 
 CREATE FULLTEXT CATALOG AdvWksFtCat AS DEFAULT ;
 GO
 USE master ;
 GO
 --Detach the AdventureWorks2008R2 database.
 sp_detach_db AdventureWorks2008R2 ;
 GO
 --Physically move the full-text catalog to the new location.
 --Attach the AdventureWorks2008R2 database and specify the new location of the full-text catalog.
 CREATE DATABASE AdventureWorks2008R2 ON
 (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\AdventureWorks2008R2_Data.mdf'),
 (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\AdventureWorks2008R2_log.ldf'),
 (FILENAME = 'c:\myFTCatalogs\AdvWksFtCat') FOR ATTACH ;
 GO- 下面的示例将 AdventureWorks2008R2 日志文件移动到一个新位置,作为计划的重定位的一部分。 - USE master ; 
 GO
 -- Return the logical file name.
 SELECT name ,
 physical_name AS CurrentLocation ,
 state_desc
 FROM sys.master_files
 WHERE database_id = DB_ID(N'AdventureWorks2008R2')
 AND type_desc = N'LOG' ;
 GO
 ALTER DATABASE AdventureWorks2008R2 SET OFFLINE ;
 GO
 -- Physically move the file to a new location.
 -- In the following statement, modify the path specified in FILENAME to
 -- the new location of the file on your server.
 ALTER DATABASE AdventureWorks2008R2
 MODIFY FILE ( NAME = AdventureWorks2008R2_Log,
 FILENAME = 'C:\NewLoc\AdventureWorks2008R2_Log.ldf') ;
 GO
 ALTER DATABASE AdventureWorks2008R2 SET ONLINE ;
 GO
 --Verify the new location.
 SELECT name ,
 physical_name AS CurrentLocation ,
 state_desc
 FROM sys.master_files
 WHERE database_id = DB_ID(N'AdventureWorks2008R2')
 AND type_desc = N'LOG' ;
SQL Server 移动数据库的更多相关文章
- 让PDF.NET支持不同版本的SQL Server Compact数据库
		最近项目中需要用到嵌入式数据库,我们选用的数据开发框架是PDF.NET(http://www.pwmis.com/SqlMap/),之前的博文已经总结了让PDF.NET支持最新的SQLite,今天我们 ... 
- Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)
		Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码) http://blog.csdn.net/helonsy/article/details/7207497 ... 
- 如何转换SQL Server 2008数据库到SQL Server 2005
		背景介绍: 公司一套系统使用的是SQL SERVER 2008数据库,突然一天收到邮件,需要将这套系统部署到各个不同地方(海外)的工厂,需要在各个工厂部署该数据库,等我将准备工作做好,整理文档 ... 
- SQL SERVER 2008数据库各版本功能对比
		微软SQL SERVER 2008数据库有6个版本,分别是数据中心版.企业版.标准版.Web版.工作组版.简易版,有时候购买的时候或需要使用某项功能时,需要了解各个版本的区别,功能差异,很多时候,大部 ... 
- SQL Server附加数据库时报1813错误的解决方案
		SQL Server附加数据库时报1813错误的解决方案 无法打开新数据库 'ASR'.CREATE DATABASE 中止. 文件激活失败.物理文件名称'E:\SqlServer\MSSQL\D ... 
- SQL Server附加数据库问题
		SQL Server附加数据库时,遇到如下问题:“如果升级全文目录,请单加“添加目录”,然后找到它并选择它.基于全文升级选项,全文索引将为“已导入”.” 解决方法: 选择数据库文件所在目录,右键-&g ... 
- SQL Server附加数据库出现错误5123的正确解决方法
		因为自己有一本基于SQL Server 2005的数据库教程,里边使用的示例数据库是AdventureWorks for SQL Server 2005,而我的机子上装的是SQL Server 200 ... 
- 通过SQL Server 2008数据库复制实现数据库同步备份
		SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常情况下只使用主 ... 
- SQL Server 2012 数据库笔记
		慕课网 首页 实战 路径 猿问 手记 Python 手记 \ SQL Server 2012 数据库笔记 SQL Server 2012 数据库笔记 2016-10-25 16:29:33 1 ... 
- SQL Server 2008 数据库镜像部署实例之三  配置见证服务器
		SQL Server 2008 数据库镜像部署实例之三 配置见证服务器 前面已经完成了镜像数据库的配置,并进行那个了故障转移测试.接下来将部署见证服务器,实现自动故障转移. 一.关于见证服务器 1.若 ... 
随机推荐
- OCP读书笔记(19) - 数据库空间管理
			传输表空间:将linux下的数据库中的test表空间传输到windows平台下的数据库 在传输表空间前,先确定一下源库与目标数据库字符集一致: select * from nls_database_p ... 
- Mac maven环境变量配置
			近期一直在学习使用Macbook,在这里记录一下全部遇到的问题 问题起源: 1.Macbook 安装了Eclipse,Eclipse装入插件maven & git , 可是在git中clone ... 
- [转载]起动service保存android系统log( logcat服务)
			原文链接:http://www.myexception.cn/android/1904013.html 启动service保存android系统log 作为android开发工程师,出现了BUG是否苦 ... 
- oracle 包,函数,过程,块的创建和执行及在java中执行(转)
			SQL> create or replace procedure sp_guocheng1 is--如果有这个名字就替换 2 begin--执行部分 3 insert into guoc ... 
- 阅读:AirBag Boosting Smartphone Resistance to Malware Infection
- Google Maps Android API v2 (3)- 地图添加到Android应用程序
			添加地图的基本步骤是: (一旦)按照以下步骤[入门] [开始],获得API,获取密钥所需的属性,并添加到您的Android清单. 添加一个碎片对象 要处理地图的活动.做到这一点最简单的方法是增加一个 ... 
- 安卓的sqlite增删改
			基于安卓的sqlite增删改,笔记学习: 1.使用LinearLayout 布局生成,增删改的页面如图 代码布局如下: <LinearLayout xmlns:android="htt ... 
- C. Captain Marmot (Codeforces Round #271)
			C. Captain Marmot time limit per test 1 second memory limit per test 256 megabytes input standard in ... 
- Caching-缓存架构与源码分析
			Caching-缓存架构与源码分析 首先奉献caching的开源地址[微软源码] 1.工程架构 为了提高程序效率,我们经常将一些不频繁修改,但是使用了还很大的数据进行缓存.尤其是互联网产品,缓存可以说 ... 
- HTML5之Canvas影片广场
			HTML5之Canvas影片广场 1.设计源代码 <!DOCTYPE html> <head> <meta charset="utf-8" /> ... 
 
			
		 预先安排的重定位与预定的磁盘维护过程
预先安排的重定位与预定的磁盘维护过程 计划的重定位过程
计划的重定位过程