服务器“servername”的还原失败。(Microsoft.SqlServer.SmoExtended)
System.Data.SqlClient.SqlError:RESTORE 无法启动数据库“ECP”。(Microsoft.SqlServer.Smo)
数据库已创建,但无法使用对象资源管理器访问:
无法访问数据库 ECP。(对象浏览器)
感谢您提供有关如何使数据库正常工作的任何建议。
编辑:这个查询
select state_desc from sys.databases where name = 'ECP';
返回RECOVERY_PENDING
。
我再次删除了数据库并重新尝试了
restore verifyonly from disk = 'path\file';
这返回
尝试还原此备份可能会遇到存储空间问题。后续消息将提供详细信息。
“F:\ECPDATA1\ECPDATA1.mdf”指定的路径不在有效目录中。
文件“F:\ECPDATA2\ECPDATA2.ndf”的目录查找失败,出现操作系统错误 3(无法检索此错误的文本。原因:15100)。
文件“F:\ECPDATA3\ECPDATA3.ndf”的目录查找失败,出现操作系统错误 3(无法检索此错误的文本。原因:15105)。
文件“F:\ECPDATA4\ECPDATA4.ndf”的目录查找失败,出现操作系统错误 3(无法检索此错误的文本。原因:15105)。
文件“E:\ECPLOG1\ECPLOG1.ldf”的目录查找失败,出现操作系统错误 21(无法检索此错误的文本。原因:15105)。
文件 1 上的备份集有效。
既然它说备份集是有效的,我只需要指定文件,让它工作,对吧?但是在这台服务器上我没有驱动器E:
或F:
. 如何在备份文件中进行调整?还是有可能(我对 windows-server-2008-r2 不太熟悉)在 linux 上拥有某种符号链接?
您的还原失败,因为您的计算机上没有 E:\ 或 F:\。
RESTORE FILELISTONLY FROM DISK = 'path\file';
- 这将告诉您数据和日志文件的逻辑名称。RESTORE DATABASE
基于此构造一个命令。例如(假设数据文件名为ECP_Data
,ECP_Data_2
等):除了更正逻辑文件名之外,请替换为您想要用于存储数据/日志文件的
C:\...path to MSSQL\Data\
任何路径。您不需要每个文件都有一个单独的文件夹,但您可能仍希望将数据和日志文件分开到不同的磁盘上。请注意,如果您选择的任何驱动器都没有足够的空间来执行还原,它仍然可能会失败。您似乎正在从具有 E: 和 F: 驱动器的服务器恢复数据库。您需要将文件移动到在 RESTORE 期间实际存在的位置。这将给出一个如下所示的恢复命令(从 SQL Server BOL 中清除):
您也可以从 UI 执行此操作,方法是转到还原对话框的选项选项卡并在“还原为”列中键入新路径。
如果您尝试将 db 从服务器还原到另一台服务器,并且还原服务器上不存在 db,您可以尝试以下方法。
可能出现的问题取决于这个原因;DB 文件可能位于还原服务器上不存在的不同磁盘名称上。
解决恢复服务器的问题; 创建一个 db 和 db 附加的 db 文件。数据库和文件名必须与备份服务器上的 db 相同(以替换 db)。然后您可以尝试在replace mode为true的情况下再次开始恢复。
如果有人在寻找尝试将 SQL Server 数据库恢复到 localdb 失败的答案时遇到这个问题(就像我所做的那样),那么它可能是localdb 限制。
我使用了 SQL Server Express 并且能够进行还原。