查了下文档即使到2019版本,sqlserver移动数据库文件位置依然是要停机的,注意待移动文件大小,估计好停机时间。
sqlserver 移动数据库文件位置分为两大类:
- 用户数据库
- 系统数据库
系统数据库又可分为再分为:
- 除master及resource以外的系统数据库(model,msdb,tempdb)
- master数据库
- resource数据库
下面分别来看
一、 用户数据库
1. 检查文件逻辑名称及物理位置
SELECT name,physical_name,state_desc FROM sys.master_files WHERE database_id = DB_ID(N'testdb');
其中name是逻辑名,physical_name是物理位置,记下这两列值
2. OFFLINE待移动数据库
use master;
ALTER DATABASE database_name SET OFFLINE;
3. 将一个或多个文件移动或复制到新位置
4. 对每个移动的文件,执行以下语句
ALTER DATABASE database_name MODIFY FILE (NAME=logical_name,FILENAME='new_path\os_file_name');
5. ONLINE数据库
use master;
ALTER DATABASE database_name SET ONLINE;
执行online命令后会进入“In Recovery”状态,recover完成后变为可读写状态
6. 检查文件移动后位置
SELECT name,physical_name,state_desc FROM sys.master_files WHERE database_id = DB_ID(N'testdb');
二、 除master及resource以外的系统数据库
步骤与用户数据库类似,只是执行顺序略有不同,另外从数据库offline改为了关闭实例。
1. 检查文件逻辑名称及物理位置
SELECT name,physical_name,state_desc FROM sys.master_files WHERE database_id = DB_ID(N'msdb');
2. 对每个准备移动的文件,先执行以下语句
ALTER DATABASE database_name MODIFY FILE (NAME=logical_name,FILENAME='new_path\os_file_name');
3. 关闭sqlserver实例
4. 将一个或多个文件移动或复制到新位置
5. 启动sqlserver实例
6. 检查文件移动后位置
SELECT name,physical_name,state_desc FROM sys.master_files WHERE database_id = DB_ID(N'msdb');
三、 master系统数据库
比较复杂,也容易出问题,没事最好别移,换操作系统盘符可能还比较简单。
1. 关闭sqlserver实例
2. 更改启动参数路径
“SQL Server配置管理器” -> “SQL Server服务”节点 -> 右击SQL Server实例(MSSQL2016) -> 选择“属性” -> 单击“启动参数”。
可以看到默认指定了3个参数,每个参数后紧跟文件路径(没有空格):
- -d:datafile
- -e:errorlogfile
- -l:logfile
修改对应参数后内容,指定master库数据和日志文件新路径
-dC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\DATA\master.mdf
-eC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\Log\ERRORLOG
-lC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\DATA\mastlog.ldf
3. 移动master库数据文件和日志文件到新目录
注意errorlogfile如果更改了位置可以不移动,会重新生成
4. 启动 SQL Server 实例服务
5. 检查文件移动后位置
SELECT name,physical_name,state_desc FROM sys.master_files WHERE database_id = DB_ID(N'master');
四、 Resource系统数据库
Resource为只读数据库,不直接显示在系统数据库中,它包含SQL Server中的所有系统对象。这个数据库不能移动,也不能通过sqlserver备份。
Resource 数据库的位置是 <drive>:\Program Files\Microsoft SQL Server\MSSQL<version>.<instance_name>\MSSQL\Binn\
参考