无法还原 mssql 数据库,因为缺少 .mdf 文件

Cannot restore mssql database because .mdf file is missing

我正在尝试从 SqlServer 2014(在 Windows 10 OS 中)备份数据库并将其恢复到 SqlServer 2017(在 Ubunutu 18.04 Digital Ocean 中)。

我使用以下 SQL 命令进行备份:

USE [master]
GO
BACKUP DATABASE [SampleDb] TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\Backup\SampleDb.bak' WITH CHECKSUM, COPY_ONLY, FORMAT, INIT, STATS = 10;

我正在尝试使用以下 SQL 命令进行恢复:

RESTORE DATABASE [SampleDb] FROM DISK = '/home/faizan/SampleDb.bak' WITH CHECKSUM, MOVE 'SampleDb_Data' TO '/home/faizan/SampleDb_Data.mdf', MOVE 'SampleDb_Log' TO '/home/faizan/SampleDb_log.ldf', RECOVERY, REPLACE, STATS = 10;

但是,当我尝试恢复数据库时,我的 Ubuntu 服务器出现以下错误:

当我运行以下命令检查.mdf和.ldf文件的状态时,

RESTORE FILELISTONLY FROM DISK = '/home/faizan/SampleDb.bak'

我得到以下结果:

我是 ubuntu 新手,我在这里根本看不到 mdf 文件。当我尝试在没有 mdf 文件的情况下进行恢复时,出现错误。

那么,当 .mdf 文件丢失时,如何在 ubuntu 中恢复此 Mssql 备份?

(额外说明:SampleDb.mdf 文件存在于 Windows 10 中,位于 C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA, 它只是没有得到 t运行sfered 到 Ubuntu)

这个问题并不是 Ubuntu 特有的,它也会出现在 Windows 个盒子上。

您的 RESTORE 脚本中有一件小事需要修复。根据屏幕截图,MDF 文件的逻辑名称是 SampleDb 而不是 SampleDb_Data.

因此调整后的命令为:

RESTORE DATABASE [SampleDb] FROM DISK = '/home/faizan/SampleDb.bak' 
WITH CHECKSUM
, MOVE 'SampleDb' TO '/var/opt/mssql/data/SampleDb_Data.mdf'
, MOVE 'SampleDb_Log' TO '/var/opt/mssql/data/SampleDb_log.ldf'
, RECOVERY, REPLACE, STATS = 10;

更新: 正如 Larnu 所说,另一件需要考虑的事情是数据库文件的位置。 MSSQL 用户应具有 read/write 访问权限,并且 /var/opt/mssql/data 是此类文件的默认位置。