我尝试恢复差异备份但出现以下错误:
服务器还原失败。(Microsoft.Sqlserver.smoextended)附加信息:system.data.sqlclient.sqlerror:文件“astroved_data”无法通过此还原操作移动(microsoft.sqlserver.smo)
astroved_data 是一个.mdf 文件。
谁能帮我?
答案1
我无法让此错误发生在您指定使用的 SSMS 2008 中,但我可以让它发生在 SSMS 2005 中。
原因是当您在 OPTIONS 页面下进行差异还原时,您无法为数据文件指定新位置。
如果您在选项页面中恢复完整备份时选择了新位置,则必须将其更改为相同的物理位置当您进行差异还原时。否则,SSMS 会将其放入原始位置并尝试将其还原到那里。
该问题似乎已在 SSMS 2008 中修复(已使用 RTM 检查)在进行差异还原时,它似乎会忽略在路径选项页面上输入的任何值,即使位置无效。
您还选择了哪些其他选项?这可能是触发错误的另一种方式?尝试将数据/日志文件放在与完整恢复中使用的相同位置,看看是否可以解决问题。
如果你厌倦了 SSMS 的摆布,那么学习使用 T-SQL 进行恢复:
-- use this command to get the logical names for the restore
-- so you can specify a new location using MOVE
RESTORE FILELISTONLY FROM DISK='c:\av_full.bak'
-- restore the full backup, don't recover yet
RESTORE DATABASE adventureworks1 FROM DISK= 'c:\av_full.bak' WITH
MOVE 'AdventureWorks_Data' to 'C:\AdventureWorks_Data.mdf',
MOVE 'AdventureWorks_Log' to 'C:\AdventureWorks_Log.ldf' ,
NORECOVERY
-- restore the differential
RESTORE DATABASE adventureworks1 FROM DISK= 'c:\av_diff.bak'
答案2
我遇到过几次这个问题。如果您更熟悉 SSMS,最简单的解决方法是像最初一样准备恢复,然后单击“恢复”对话框中的“脚本”按钮。
这将输出类似这样的内容:
RESTORE DATABASE [UAT]
FROM DISK = N'd:\Database_backup\mydifferentialbackup.bak'
WITH FILE = 1,
MOVE N'mydb_Data' TO N'R:\MSSQL10_50.REPORTING\MSSQL\Data\mydb.mdf',
MOVE N'mydb_FullText' TO N'R:\MSSQL10_50.REPORTING\MSSQL\Data\mydb.ndf',
MOVE N'mydb_Log' TO N'R:\MSSQL10_50.REPORTING\MSSQL\Data\mydb.ldf',
NOUNLOAD, STATS = 10
GO
然后只需删除 MOVE 子句:
RESTORE DATABASE [UAT]
FROM DISK = N'd:\Database_backup\mydifferentialbackup.bak'
WITH FILE = 1,
NOUNLOAD, STATS = 10
GO
嗯,这应该可行。