如何从无法启动的Windows服务器迁移SQL Server数据至新服务器?
从无法启动的SQL Server服务器恢复数据到新实例的方案
嘿,别担心,这种情况完全有办法恢复数据——因为你的磁盘还能读取,SQL Server的核心数据都存在物理文件里,只要这些文件没损坏,就能顺利迁移到新服务器上。下面分情况给你详细说操作步骤:
情况1:原数据库是正常关闭的(比如崩溃前SQL服务正常停止过)
这是最理想的情况,操作起来很顺畅:
- 先从旧磁盘里找出对应数据库的所有文件:
- 默认存储路径一般是
C:\Program Files\Microsoft SQL Server\MSSQLXX.MSSQLSERVER\MSSQL\DATA(XX是版本号,比如MSSQL15对应SQL Server 2019) - 每个数据库至少包含一个
.mdf(主数据文件)和一个.ldf(事务日志文件),如果数据库分了分区存储,还会有.ndf格式的次要数据文件——这些文件必须全部复制,少一个都不行 - 把复制好的文件放到新服务器的某个目录里,记得给这个目录设置权限:让新SQL Server的服务账户(通常是
NT SERVICE\MSSQLSERVER)拥有读取和写入权限,不然附加数据库时会报错
- 默认存储路径一般是
- 然后在新SQL Server里完成附加操作:
- 用SSMS(SQL Server Management Studio)可视化操作:右键「数据库」→「附加」→「添加」,选中复制过来的
.mdf文件,系统会自动匹配对应的.ldf文件,确认路径无误后点击确定即可 - 偏好命令行的话,执行这段T-SQL代码:
CREATE DATABASE [你的数据库名称] ON (FILENAME = 'D:\新服务器存储路径\你的数据库.mdf'), (FILENAME = 'D:\新服务器存储路径\你的数据库.ldf') FOR ATTACH;
- 用SSMS(SQL Server Management Studio)可视化操作:右键「数据库」→「附加」→「添加」,选中复制过来的
情况2:原数据库是异常关闭的(服务器突然崩溃,没来得及正常停止SQL服务)
这种情况下,事务日志可能残留未提交的操作,直接附加大概率会报错,需要用强制恢复的方式:
- 同样先把
.mdf、.ldf(以及.ndf如果存在的话)全部复制到新服务器目录,设置好权限 - 先尝试正常附加,如果SSMS提示日志损坏或需要重建,就用下面的T-SQL命令强制附加:
这个命令会自动重建一个新的事务日志文件,虽然可能会丢失最后几个未提交的事务,但能最大程度保留核心数据,执行完成后数据库就能正常使用了CREATE DATABASE [你的数据库名称] ON (FILENAME = 'D:\新服务器存储路径\你的数据库.mdf') FOR ATTACH_REBUILD_LOG;
几个关键注意事项
- 必须复制所有相关文件:只拿
.mdf文件是没用的,SQL Server需要完整的文件集合才能识别并恢复数据库 - 权限设置不能忘:新SQL Server的服务账户必须能访问你存放复制文件的目录,否则会出现权限不足的报错
- 版本要兼容:新SQL Server的版本不能低于原服务器的版本(比如原是2016版,新可以是2016/2019/2022,但不能是2014)。如果新版本更高,附加后数据库会自动升级,升级完成后就无法再放回旧版本的SQL Server中使用
- 文件完整性检查:如果你的
.mdf文件本身已经损坏,那可能需要专业数据恢复工具,但你提到磁盘可正常读取,大概率文件是完好的,不用过于担心
关于直接复制文件的问题
完全可以通过复制文件来完成迁移,但不是把文件直接丢到新服务器的DATA目录就完事了——你必须通过SQL Server的「附加」操作,让新实例把这个数据库注册到系统中(因为master系统数据库需要记录用户数据库的信息)。直接复制文件而不做附加的话,新SQL Server根本不会识别到这个数据库的存在
内容的提问来源于stack exchange,提问作者Tinman
相关产品推荐
相关产品推荐

