我正在尝试恢复数据库备份但出现错误:
服务器“ASIF-VAIO”恢复失败。 (微软.SqlServer.SmoExtended)
其他信息:
System.Data.SqlClient.SqlError:文件'C:\ Program Files \ Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\uwa.mdf' 的声明者 “Aston_Fresh_log”(2) 和“Aston_Fresh”(1)。 WITH MOVE 子句可以是 用于重新定位一个或多个文件。 (微软.SqlServer.Smo)
恢复时,需要务必
Overwrite
选项卡页中勾选 Options
选项,并为 .mdf
和 .ldf
文件定义 valid和新文件名,这样您就不会意外覆盖系统上的另一个数据库:
这篇文章有一些很好的答案,但我不相信这里涵盖了我的解决方案,或者我不理解答案/评论。
但是,当我遇到此错误时,我正在恢复具有 2 个索引(主索引和索引)的数据库。问题是,恢复时它创建了两个 .ndf 文件,每个索引一个,但将它们命名为相同的文件。
所以本质上我有两个“恢复为”文件恢复到“D:\MSSQLDATA\DatabaseName.ndf”。
为了克服这个问题,我必须更改其中一个文件名,例如我更改了
Index | D:\MSSQLDATA\DatabaseName.ndf
Primary | D:\MSSQLDATA\DatabaseName1.ndf
具有唯一的文件名为我解决了这个问题。
这对我有用:为脚本部分中的每个 MDF 和 LDF 文件指定不同的名称。
MOVE N'R_Data'
TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Build51_Testing_db1.mdf',
MOVE N'R_audit'
TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Build51_Testing_db2.mdf',
等等...
最初由阿尔贝托·莫里洛建议
我知道距离上次回答已经很久了,但我碰巧在谷歌中搜索了这个问题的解决方案。 对我来说,编写恢复脚本(更改文件名不起作用)并手动更改代码中的文件名
RESTORE DATABASE [DB_NAME]
FILE = N'[name]',
FILE = N'[name1]',
FILE = N'[name2]'
FROM DISK = N'[file_path]'
WITH FILE = 1m
MOVE N'[name]' TO N'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\\[name].mdf',
MOVE N'[name1]' TO N'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\\[name1].mdf',
MOVE N'[name2]' TO N'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\\[name2].mdf',
MOVE N'[logname]' TO N'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\\[logname].ldf'
NOUNLOAD,
REPLACE,
STATS = 10
GO
问候
如果您遇到此问题且不是上述问题,请尝试在“还原选项”>“文件”下,选中“将所有文件重新定位到文件夹”复选框。
就我而言,我的
.mdf
文件夹中已经有 .ldf
和 \DATA
文件,所以我必须创建两个新文件:
New-Item C:\path\to\sql\DATA\NewDatabase.mdf
New-Item C:\path\to\sql\DATA\NewDatabase_log.ldf
然后在SQL管理器中,您需要在恢复数据库时选择这些新文件。
如果无法通过 SSMS 对话框进行冲突文件路径的恢复,则可能必须通过 T-SQL 执行以下操作:
RESTORE FILELISTONLY
FROM DISK = 'C:\backupfile.bak';
这将列出备份中包含的文件及其属性,例如它们的逻辑名称和备份的物理路径。
对于步骤 1 中列出的每个逻辑文件,使用
MOVE
选项手动指定目标文件位置:
RESTORE DATABASE mydatabase
FROM DISK = 'C:\backupfile.bak'
WITH
MOVE 'LogicalDataFileName' TO 'C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL16.MSSQLSERVER\MSSQL\DATA\LogicalDataFileName.mdf',
MOVE 'LogicalLogFileName' TO 'C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL16.MSSQLSERVER\MSSQL\DATA\LogicalDataFileName.ldf'
确保这些新目标位置均不相同,并且步骤 1 中列出的所有文件均使用
MOVE
选项指定。
注意:此示例假设 SQL Server 实例安装在
C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL16.MSSQLSERVER
(对于 SQL Server 2022,为 MSSQL16)。这些需要根据实际的SQL Server环境进行更改。