当使用 RESTORE FILELISTONLY 来使用代码恢复数据库时,文件的 logical_name 返回为 423。
但是,当我手动恢复数据库时,逻辑文件名似乎是 3497。
我正在运行 SQL Server 2008 R2。有没有人遇到过这样的事情?我该如何修复?
当使用 RESTORE FILELISTONLY 来使用代码恢复数据库时,文件的 logical_name 返回为 423。
但是,当我手动恢复数据库时,逻辑文件名似乎是 3497。
我正在运行 SQL Server 2008 R2。有没有人遇到过这样的事情?我该如何修复?
所以听起来像是正在发生的事情是:
foo
,其逻辑数据文件名为foo
.bar
)。bar
数据库。bar
备份还原为另一个数据库名称,并且您的代码假定数据库数据文件的逻辑文件名bar
应该是bar
. 但它不是,它仍然是foo
!您还可以在其中插入一些随机
ALTER DATABASE x MODIFY FILE (name = 'y', newname = 'z');
数,使您更加困惑(不要介意您的代码)。特别是如果 - 就像你的情况一样 - 你将多个备份存储在一个备份文件中。这可能很糟糕,无论它是同一个数据库但逻辑文件名随时间变化,还是不同的数据库备份到同一个文件。您需要确定您实际要查找的文件编号,并在FILELISTONLY
的WITH FILE =
选项中指定。更好的是,停止重复使用同一个文件进行多个备份。您应该确保当您基于另一个备份恢复新数据库时,您使用
WITH MOVE
给逻辑文件名赋予有意义的物理路径,然后MODIFY FILE
立即使用使逻辑名本身有意义。为了帮助找出您遇到的特定案例的实际差异在哪里(我无法重现
RESTORE FILELISTONLY
显示与 SSMS 中的还原 UI 不同的值的案例),您可以在某些文件共享服务上提供 .bak 文件,我们可以看看自己。您对文件名是什么以及它们应该是什么的描述非常难以理解。