我备份了一个数据库:

BACKUP DATABASE MyDatabase
TO DISK = 'MyDatabase.bak'
WITH INIT --overwrite existing

然后试图恢复它:

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE --force restore over specified database

现在数据库处于还原状态。

有些人推测,这是因为备份中没有日志文件,需要使用以下方法前滚:

RESTORE DATABASE MyDatabase
WITH RECOVERY 

当然,这是行不通的:

Msg 4333, Level 16, State 1, Line 1
The database cannot be recovered because the log was not restored.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

在灾难性的情况下,你想要的是一个无法工作的恢复。


备份包含数据文件和日志文件:

RESTORE FILELISTONLY 
FROM DISK = 'MyDatabase.bak'

Logical Name    PhysicalName
=============   ===============
MyDatabase    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase.mdf
MyDatabase_log  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase_log.LDF

当前回答

如果启用了快照,删除被卡住的数据库也会有问题。对我来说,这很有效:

首先,我遵循了Tipu Delacablu的步骤(阅读一些帖子) 运行命令:drop database [your database],这将给您一个错误,告诉您快照数据库的名称 执行命令drop database [snapshot database],然后再执行步骤2中的命令。

其他回答

这是一个老问题,SQL Server一直在出现,即使是最新的2019版本!我不知道为什么微软让这种痛苦持续了这么长时间,并允许他们的MSSQL引擎继续以这种方式表现。尽管如此,对于那些尝试过RESTORE DATABASE WITH RECOVERY的人,我建议另一种可能的解决方案 选项,但它仍然不起作用。

登录到服务器本身,并在实际的数据库服务器上启动默认的SSMS程序。接下来进入“恢复”数据库并删除它。完成了。问题消失了。如果需要保留它,复制MDF文件并重命名它,然后将其附加为一个新数据库。在SQL Server 2008 R2上为我工作。

执行RESTORE DATABASE/RESTORE LOG命令时,默认使用WITH RECOVERY选项。如果你被困在“恢复”过程中,你可以通过执行以下命令将数据库恢复到在线状态:

RESTORE DATABASE YourDB WITH RECOVERY
GO

如果需要恢复多个文件,CLI命令分别需要WITH NORECOVERY和WITH RECOVERY -只有命令中的最后一个文件需要WITH RECOVERY才能使数据库恢复在线:

RESTORE DATABASE YourDB FROM DISK = 'Z:\YourDB.bak'
WITH NORECOVERY
GO
RESTORE LOG YourDB FROM DISK = 'Z:\YourDB.trn'
WITH RECOVERY
GO

你也可以使用SQL Server Management Studio向导:

也有虚拟恢复过程,但你必须使用第三方解决方案。通常,您可以使用数据库备份作为实时在线数据库。ApexSQL和Idera都有自己的解决方案。由SQL Hammer审查关于ApexSQL恢复。如果要处理大量备份,虚拟恢复是一个很好的解决方案。恢复过程要快得多,还可以节省磁盘驱动器上的大量空间。你可以看看这里的信息图进行一些比较。

我也有同样的问题……虽然我不知道为什么我的数据库遇到这个问题,因为我的驱动器没有满…好像是被损坏了什么的。我尝试了以上所有的,没有一个完全工作,我特别认为建议停止服务和删除mdf和ldf文件将工作…但在恢复时仍然死机?

我最终通过删除上面提到的文件来解决这个问题,但我没有尝试再次恢复DB,而是复制了新鲜的.mdf和.ldf文件,并使用前端附件向导附加这些文件。如释重负,它起作用了!!

它花了永远复制的新文件,因为我正在使用虚拟机…所以用剪贴板复制粘贴本身就花了一个小时,所以我只推荐这是最后一次尝试。

我知道为什么了。

如果发出RESTORE DATABASE命令的客户端在恢复期间断开连接,则恢复将卡住。

奇怪的是,当客户机连接告诉服务器恢复数据库时,除非客户机一直保持连接,否则服务器不会完成恢复。

我有一个类似的事件,停止日志运输辅助服务器。 在执行从日志发送中删除服务器并停止从主服务器发送日志的命令后,辅助服务器上的数据库在执行命令后陷入恢复状态

RESTORE DATABASE <database name> WITH RECOVERY

数据库消息:

RESTORE DATABASE在18.530秒内成功处理0页 (0.000 MB /秒)。

在那18秒之后,数据库又可以使用了。