移动master数据库

master 数据库记录 SQL Server 系统的所有系统级信息。这包括实例范围的元数据(例如登录帐户)、端点、链接服务器和系统配置设置。master 数据库还记录所有其他数据库是否存在以及这些数据库文件的位置。另外,master 还记录 SQL Server 的初始化信息。因此,如果 master 数据库不可用,则 SQL Server 无法启动。在 SQL Server 2005 中,系统对象不再存储在 master 数据库中,而是存储在 Resource 数据库中。

1.启动到单用户模式
NET START MSSQLSERVER /f /T3608

修改启动参数(配置管理器-高级标签-启动参数)
-dC:\new\master.mdf;
-eC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG;
-lC:\new\mastlog.ldf;
-eC:\new\ERRORLOG

2.移动master数据库
ALTER DATABASE master MODIFY FILE( NAME = master , FILENAME = 'C:\new\master.mdf')
ALTER DATABASE master MODIFY FILE( NAME = mastlog , FILENAME = 'C:\new\masterlog.ldf')

3.移动资源数据库
ALTER DATABASE mssqlsystemresource MODIFY FILE (NAME=data, FILENAME='C:\new\mssqlsystemresource.mdf')
ALTER DATABASE mssqlsystemresource MODIFY FILE (NAME=log, FILENAME='C:\new\mssqlsystemresource.ldf')

4.停止SQL Server
5.移动数据库文件到目标
6.启动SQL Server
7.验证
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID('master');


移动model数据库
model 数据库用作在 SQL Server 实例上创建的所有数据库的模板。因为每次启动 SQL Server 时都会创建 tempdb,所以 model 数据库必须始终存在于 SQL Server 系统中。

1.移动路径

ALTER DATABASE model MODIFY FILE( NAME = modeldev , FILENAME = 'C:\new\model.mdf')
ALTER DATABASE model MODIFY FILE( NAME = modellog , FILENAME = 'C:\new\modellog.ldf')


移动msdb数据库
msdb 数据库由 SQL Server 代理用来计划警报和作业

1.移动路径
ALTER DATABASE msdb MODIFY FILE( NAME = msdbdata , FILENAME = 'C:\new\msdbdata.mdf')
ALTER DATABASE msdb MODIFY FILE( NAME = msdblog , FILENAME = 'C:\new\msdblog.ldf')


移动tempdb
由于每次启动 MSSQLSERVER 服务时都会重新创建 tempdb,因此不需要从物理意义上移动数据和日志文件。将在步骤 3 中重新启动服务时创建这些文件。重新启动服务后,tempdb 才继续在当前位置发挥作用。


1.确定当前位置
SELECT name, physical_name
FROM sys.master_files
WHERE database_id = DB_ID('tempdb');
GO

2.使用 ALTER DATABASE 更改每个文件的位置

ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = c:\new\tempdb.mdf');

ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'c:\new\templog.ldf');


3.停止并重新启动 SQL Server。

4.验证文件更改。
SELECT name, physical_name
FROM sys.master_files
WHERE database_id = DB_ID('tempdb');