如何修复"逻辑文件X不是数据库Y的一部分..."虽然所有名字都是正确的

时间:2016-12-22 15:56:16

标签: sql-server sql-server-2012

恢复备份时,出现错误:

  

逻辑文件' foo'不是数据库的一部分' YY'。使用RESTORE   FILELISTONLY列出逻辑文件名。

如果我执行WITH FILE = 1,恢复脚本可以正常工作但如果我WITH FILE = 2则会显示错误。

我已经运行了FILELISTONLY并命名为" foo"真的存在并且它是正确的。

我已经运行了HEADERONLY并且有两个项目,我需要第二个恢复。

实际脚本:

USE [master]
RESTORE DATABASE [ni_5] 
FROM  DISK = N'C:\backup\ni_5.bak' WITH  FILE = 2 /* will work if i put 1 here*/,   NOUNLOAD,  STATS = 10,
MOVE N'foo_dat' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\ni_5.mdf',  
MOVE N'Fooind1' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\foo_1.ndf',  
MOVE N'Fooind10' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\foo_10.ndf',  
MOVE N'Fooind11' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\foo_11.ndf', 
MOVE N'Fooind12' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\foo_12.ndf',  
MOVE N'Fooind2' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\foo_2.ndf',  
MOVE N'Fooind3' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\foo_3.ndf',  
MOVE N'Fooind4' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\foo_4.ndf',  
MOVE N'Fooind5' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\foo_5.ndf',  
MOVE N'Fooind6' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\foo_6.ndf',  
MOVE N'Fooind7' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\foo_7.ndf',  
MOVE N'Fooind8' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\foo_8.ndf',  
MOVE N'Fooind9' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\foo_9.ndf',  
MOVE N'foo_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\foo_13.ldf'


GO

实际输出:

Msg 3154, Level 16, State 4, Line 2
The backup set holds a backup of a database other than the existing 'ni_5' database.
Msg 3013, Level 16, State 1, Line 2
RESTORE DATABASE is terminating abnormally.

1 个答案:

答案 0 :(得分:0)

  

备份集包含现有数据库以外的数据库备份   'ni_5'数据库。

这意味着您的ni_5.bak备份集包含与现有ni_5数据库不同的数据库备份。

  

如果我执行WITH FILE = 1,恢复脚本工作正常,但它显示了   错误,如果我用WITH FILE = 2。

考虑到上述错误,这是完全合理的,因为使用FILE = 2,您基本上说要恢复ni_5.bak备份集中包含的第二个备份(包含正确的内容)要恢复的数据库)。根据你的需要,这很好,并说:

  

我需要第二个恢复