sql server - 在 Linux 服务器实例上恢复 Windows 数据库备份文件

Gab*_* I. 6 sql-server backup linux

我需要使用 SQL 服务器实例,但是我的工作区运行 Linux,并且提供给我的数据库备份运行在 Windows 上。

我成功地在我的 Linux 环境中安装了 SQL Server,并且我使用 DBeaver 来访问它,我遇到的主要问题是当我尝试在我的 SQL Server 实例中恢复这个 .bkp 文件时。

我正在尝试使用此 SQL 命令恢复数据库,我在本站点的答案中读到,但是我需要逻辑数据文件名和逻辑数据日志。所以我运行了下一个 SQL 命令。

RESTORE DATABASE FILELISTONLY
FROM DISK = '/var/tmp/(redacted).bkp';
Run Code Online (Sandbox Code Playgroud)

我收到 SQL 错误 5133

SQL Error [5133][S0001]: Directory lookup for the file "D:\SQL2012\DATA\(redacted).mdf" failed with the operating system error 2(The system cannot find the file specified.).
Run Code Online (Sandbox Code Playgroud)

可以恢复这个文件吗?如果是这样,我做错了什么?

提前致谢。

Sha*_*tor 1

  1. 使用Remote Desktop Connectionputty会话或您选择的其他方法导航到您的 Linux 机器。

  1. 运行SQLCMD以连接到SQL Servicebash 窗口中的。

sqlcmd -S localhost -U SA
Run Code Online (Sandbox Code Playgroud)

如果需要,您可以替换 -S 和 -U 参数。

以下示例使用 SA 用户连接到本地 SQL Server 实例。出现提示时输入密码,或通过添加 -P 参数指定密码。


  1. 进入 SQLCMD 后,在 >1 提示符处,尝试以下操作:

RESTORE DATABASE FILELISTONLY
FROM DISK = '/var/tmp/(redacted).bkp';
Run Code Online (Sandbox Code Playgroud)

这将为您提供要恢复的文件列表。现在您仍然可以在 SQLCMD 中尝试此命令,并替换适用的值。

RESTORE DATABASE YourDB
FROM DISK = '/var/tmp/(redacted).bkp'
WITH MOVE '(redacted).mdf' TO '/var/opt/mssql/data/YourDB.mdf',
MOVE '(redacted).ldf' TO '/var/opt/mssql/data/YourDB_Log.ldf'
GO
Run Code Online (Sandbox Code Playgroud)

这也可以通过 GUI 来完成

MSDN 来源:在 Linux 上恢复数据库

Graham Okely 的 MS SQL Tips 提供了有关 Linux 备份和 SQLCMD 的大量附加信息。

所以答案与此相关。