SQL-Server:错误 - 逻辑文件不是数据库的一部分。使用 RESTORE FILELISTONLY 列出逻辑文件名

新手上路,请多包涵

我制作了一个脚本来恢复 .bak 或备份文件。它适用于某些数据库,但不适用于一个。如何使它适用于任何类型的 .bak 文件?这是在 sql server 2008 中。错误消息是 -

 Msg 3234, Level 16, State 1, Line 1
Logical file 'Northwind_Data' is not part of database 'Northwind'.
Use RESTORE FILELISTONLY to list the logical file names.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

脚本 -

 IF DB_ID('Northwind') IS NULL
BEGIN
RESTORE DATABASE [Northwind]
FILE = N'Northwind_Data'
FROM
DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SS2008\MSSQL\Backup\Northwind.bak'
WITH  FILE = 1,
MOVE N'Northwind_Data'
TO N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SS2008\MSSQL\DATA\Northwind.mdf',
MOVE N'Northwind_Log'
 TO N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SS2008\MSSQL\DATA\Northwind_0.LDF',
NOUNLOAD,  STATS = 10
END

原文由 Steam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 918
1 个回答

这个问题可能太老了,但我希望这个答案可以帮助别人。我今天遇到了一种情况,我必须从 Windows 环境创建备份并将其导入 macOS 上的 docker 容器中。

一旦你有了 .bak 文件,你只需要执行以下 2 个步骤,你的备份应该就可以导入了。

  1. .bak 文件中获取 LogicalName
 RESTORE FILELISTONLY
FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SS2008\MSSQL\Backup\YourDB.bak'

  1. 然后你只需要运行以下命令。 (确保在 Move 关键字之后替换 LogicalName(单引号)
 RESTORE DATABASE medjobs_devCurrent FROM DISK = N'/var/opt/mssql/data/YourDB.bak'
WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf'
, MOVE 'YourDB_log' TO '/var/opt/mssql/data/YourDB_log.ldf'

第 1 步的功劳归于@Saurabh Sinha。

原文由 Asad ullah 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进