背景

当前有一套SQL server数据库(Primary+Mirror)主备环境数据盘大小不一致,且灾备环境无法对磁盘进行扩容,需要对灾备环境进行整体数据文件迁移,满足当前数据库运行。


  1. 停止数据库mirro同步
select 'use [master] ALTER DATABASE ['+db_name(database_id)+'] SET PARTNER SUSPEND' 
from sys.database_mirroring where mirroring_state is not null;
  1. 最好使用启动数据库的域账户进行新数据目录的创建,避免繁琐的加权限步骤或因权限问题导致数据库状态异常
  2. 在数据库内查询数据文件信息
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
  1. 将需要移动(非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盘
  1. 停止数据库服务
  2. 将需要移动的数据库文件或日志文件全部移动到I盘
  3. 启动数据库服务,并检查主备同步是否正常
  4. 停止数据库服务
  5. 将master数据库数据文件移动至I盘
  6. 使用SSCM(SQL Server Configuration Manager)修改启动文件配置参数,修改master文件、log位置及error文件位置

SQL server 数据文件物理层面迁移_数据库

  1. 修改注册表信息(避免在进行数据库补丁更新时报错)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.<instance_name>\Setup\SQLDataRoot
  1. 启动数据库服务并检查主备同步是否正常