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.若 ...
随机推荐
- 6月27日CTO俱乐部下午茶印象
作者:朱金灿 来源:http://blog.csdn.net/clever101 感谢CSDN的邀请,有幸参加了6月27日“CTO俱乐部下午茶时光:CTO在团队管理中所遇到的那些事”活动.本期的主讲嘉 ...
- 大爱jQuery,10美女模特有用jQuery/CSS3插入(集成点免费下载)
整合下载地址:http://download.csdn.net/detail/yangwei19680827/7343001 jQuery真的是一款非常犀利的Javascript框架,利用jQuery ...
- coco2d-x 基于视口的地图设计
<pre name="code" class="plain"> 基于视口的地图设计 DionysosLai 2014-06-14 第三人称游戏,玩家 ...
- hadoop 提高hdfs删文件效率----hadoop删除文件流程解析
前言 这段时间在用hdfs,由于要处理的文件比较多,要及时产出旧文件,但是发现hdfs的blocks数一直在上涨,经分析是hdfs写入的速度较快,而block回收较慢,所以分心了一下hadoop删文件 ...
- OpenCV Haar AdaBoost源代码改进(比EMCV快6倍)
这几天研究了OpenCV源代码 Haar AdaBoost算法,作了一下改进 1.去掉了全部动态分配内存的操作.对嵌入式系统有一定的速度提升 2.凝视覆盖了大量关键代码 3.降低了代码一半的体积,而且 ...
- Python3.4 邮件(包含附件与中国)
import smtplib import os from email.mime.text import MIMEText from email.mime.multipart import MIMEM ...
- 使用Ratpack和Spring Boot打造高性能的JVM微服务应用
使用Ratpack和Spring Boot打造高性能的JVM微服务应用 这是我为InfoQ翻译的文章,原文地址:Build High Performance JVM Microservices wit ...
- iOS UIWebView 载入https 网站出现NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL,
今天在载入https网站的时候遇到例如以下的错误问题.所以对自己之前写的iOS内嵌webview做了一些改动,能够让它载入http网站也能够让它载入https网站. 以下是我载入https网站的时候出 ...
- linux、hdfs、hive、hbase经常使用的命令
linux经常使用命令 pwd 查看当前工作文件夹的绝对路径 cat input.txt 查看input.txt文件的内容 ls 显示当前文件夹下全部的文件及子文件夹 rm recommender-d ...
- SICP 锻炼 (2.15)解决摘要:深入思考间隔误差
SICP 2.15 是接着 题目 2.14 的, 题目 2.14中提到了Alyssa设计的区间计算模块在并联电阻计算时会出现故障,这个问题是Lem发现的. 接着,一个叫Eva的人也发现了这个问题.同一 ...
预先安排的重定位与预定的磁盘维护过程
计划的重定位过程