You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Linux版MS SQL Server恢复备份文件遇路径问题求助

我来帮你搞定这个恢复问题!你遇到的报错核心原因是:SQL Server备份文件里会记录原始数据库的物理文件路径(就是那个Windows风格的D:\路径),但Linux容器里根本不存在这个路径,所以恢复时SQL Server找不到地方存放数据文件和日志文件。咱们一步步解决:

第一步:先查看备份文件里的文件信息

首先得搞清楚备份里包含哪些逻辑文件,以及它们的原始路径。运行这条命令:

sqlcmd -S localhost -U SA -Q "RESTORE FILELISTONLY FROM DISK = '/trash/dbWINS_MPMBA201803141100.bak'"

执行后会得到类似这样的输出(示例):

LogicalName PhysicalName


MyTrash_Data D:\SQLData\MyTrash.mdf
MyTrash_Log D:\SQLLogs\MyTrash.ldf

这里的LogicalName是关键,你要把它们记下来,后面恢复命令要用到。

第二步:修改恢复命令,添加路径映射

容器里SQL Server默认的数据存储目录是/var/opt/mssql/data/,我们需要用MOVE参数把备份里的原始Windows路径替换成容器内的合法路径。修改后的命令如下(记得替换成你第一步得到的实际LogicalName):

sqlcmd -S localhost -U SA -Q "RESTORE DATABASE mytrash FROM DISK = '/trash/dbWINS_MPMBA201803141100.bak' WITH 
FILE = 1, 
NOUNLOAD, 
REPLACE, 
RECOVERY, -- 如果不需要后续追加备份恢复,用RECOVERY让数据库直接可用;如果要继续恢复其他备份,保留NORECOVERY
STATS = 5,
MOVE 'MyTrash_Data' TO '/var/opt/mssql/data/mytrash.mdf',
MOVE 'MyTrash_Log' TO '/var/opt/mssql/data/mytrash.ldf'"
额外注意事项
  • 确保你的.bak文件已经正确挂载到容器的/trash目录下,不然容器连备份文件本身都找不到;
  • SA密码要正确,你可以交互式输入,也可以用-P参数指定(不推荐明文输入,风险高);
  • 如果你后续还需要恢复差异备份或日志备份,再把RECOVERY改回NORECOVERY,否则恢复完成后数据库会直接处于可用状态。

内容的提问来源于stack exchange,提问作者joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:10:34