我备份了一个数据库:

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

当前回答

好吧,我有类似的问题,就像在Pauk的情况下一样,这是由服务器在恢复时耗尽磁盘空间引起的,因此导致了永久恢复状态。 如何在不停止SQL Server服务的情况下结束此状态?

我找到了一个解决方案:)

Drop database *dbname*

其他回答

好吧,我有类似的问题,就像在Pauk的情况下一样,这是由服务器在恢复时耗尽磁盘空间引起的,因此导致了永久恢复状态。 如何在不停止SQL Server服务的情况下结束此状态?

我找到了一个解决方案:)

Drop database *dbname*

当我在事件日志中也收到TCP错误时,我遇到了这个问题…

用sql删除数据库或在管理器“delete”中右键单击它 然后再恢复。

实际上我已经开始默认这样做了。脚本数据库删除,重新创建,然后恢复。

我今天在虚拟机SQL Server上遇到了这个问题。我试图恢复一个1.8GB的数据库,它被ASYNC_IO_COMPLETION卡在0%。

我尝试了多次,将.bak文件移动到我要恢复到的驱动器;甚至试图恢复另一个大小<400MB的不相关数据库。

我在这个帖子上尝试了所有的方法,都没有成功。

然后我遇到了恢复卡在DBA的ASYNC_IO_COMPLETION和答案为我工作。

启用“立即文件初始化”并重新启动SQL Server,然后重试恢复。SSMS GUI几乎立即显示进度百分比,如下所示:

Select percent_complete,* From sys.dm_exec_requests

我的猜测是VM后面的存储非常慢,或者有故障。

RESTORE DATABASE {DatabaseName}
   FROM DISK = '{databasename}.bak'
   WITH REPLACE, RECOVERY

在我的例子中,使用SQL命令删除挂起状态为“还原…”的数据库就足够了

 drop database <dbname> 

在查询窗口中。

然后我右键单击Databases并选择Refresh,这将删除SQL Server Management Studio (SSMS)中的条目。之后,我做了一个新的恢复,工作良好(注意,使它脱机不起作用,重新启动SQL服务不起作用,服务器重新启动也不起作用)。