移动系统数据库在下列状况下可能颇有用:数据库
故障恢复。例如,数据库处于可疑模式下或因硬件故障而关闭。工具
计划的重定位。spa
为预约的磁盘维护操做而进行的重定位。日志
移动 Master 数据库
code
在“开始”菜单中,依次指向“全部程序”、Microsoft SQL Server 和“配置工具”,再单击 SQL Server 配置管理器。blog
在“SQL Server 服务”节点中,右键单击 SQL Server 实例(如 SQL Server (MSSQLSERVER)),并选择“属性”。ip
在“SQL Server (实例名) 属性”对话框中,单击“高级”选项卡。it
编辑“引导参数”值以指向 master 数据库数据和日志文件的计划位置,而后单击“肯定”。能够选择移动错误日志文件。io
数据文件的参数值必须跟在 -d 参数的后面,日志文件的参数值必须跟在 -l 参数的后面。下面的示例显示 master 数据和日志文件默认位置的参数值。ast
-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
ALTER DATABASE [master] MODIFY FILE(NAME='tempdev',FILENAME='E:\SQLData\master.mdf')
将 master.mdf 和 mastlog.ldf 文件移动到新位置(这个位置就是上面参数所指定的位置,即:E:\SQLData)。
从新启动 SQL Server 实例。
经过运行如下查询,验证 master 数据库的文件更改。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID('master'); GO
移动 Resource 数据库
Resource 数据库的位置为 <drive>:\Program Files\Microsoft SQL Server\MSSQL10_50.<instance_name>\MSSQL\Binn\。没法移动该数据库。
移动其它系统数据库
注意:因为每次启动 SQL Server 实例时都将从新建立 tempdb,因此没必要实际移动数据和日志文件。在从新启动服务时,将在新位置中建立这些文件。在从新启动服务以前,tempdb 将继续使用现有位置中的数据和日志文件。
如下为移动系统数据库步骤:
1. 肯定系统数据库的逻辑文件名称以及在磁盘上的当前位置。
-- 如tempdb SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID(N'tempdb'); GO
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:\SQLLog\templog.ldf'); GO
3. 中止服务并移动文件到更改位置
4. 从新启动 SQL Server 的实例服务。
5. 验证文件更改。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files
再将系统文件,如 tempdb.mdf 和 templog.ldf 文件从其原始位置删除。
备一个脚本,能够对多实例的时候使用:
select 'ALTER DATABASE ['+db_name([database_id])+'] MODIFY FILE(NAME='''+name+''',FILENAME='''+REPLACE([physical_name],'C:\Program Files\Microsoft SQL Server\','E:\SQLData\')+''')' from sys.master_files where physical_name like 'c:%' AND [database_id]<>1