背景
当前有一套SQL server数据库(Primary+Mirror)主备环境数据盘大小不一致,且灾备环境无法对磁盘进行扩容,需要对灾备环境进行整体数据文件迁移,满足当前数据库运行。
- 停止数据库mirro同步
select 'use [master] ALTER DATABASE ['+db_name(database_id)+'] SET PARTNER SUSPEND'
from sys.database_mirroring where mirroring_state is not null;
- 最好使用启动数据库的域账户进行新数据目录的创建,避免繁琐的加权限步骤或因权限问题导致数据库状态异常
- 在数据库内查询数据文件信息
SELECT sd.name as DBName, saf.name as LogicalName, saf.filename
FROM master.sys.sysaltfiles saf
INNER JOIN master.sys.sysdatabases sd ON saf.dbid = sd.dbid
- 将需要移动(非master)的数据文件或日志在数据库内进行配置
(I:\MSSQL_DATA\MSSQL15.PRDDR_\MSSQL\DATA)
SELECT 'ALTER DATABASE '+sd.name+' MODIFY FILE ( NAME = ' +saf.name+', FILENAME = '''+saf.filename+''');'
FROM master.sys.sysaltfiles saf
INNER JOIN master.sys.sysdatabases sd ON saf.dbid = sd.dbid
Where sd.name !=master;
将filename全部替换成I盘
- 停止数据库服务
- 将需要移动的数据库文件或日志文件全部移动到I盘
- 启动数据库服务,并检查主备同步是否正常
- 停止数据库服务
- 将master数据库数据文件移动至I盘
- 使用SSCM(SQL Server Configuration Manager)修改启动文件配置参数,修改master文件、log位置及error文件位置
- 修改注册表信息(避免在进行数据库补丁更新时报错)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.<instance_name>\Setup\SQLDataRoot
- 启动数据库服务并检查主备同步是否正常