我备份了一个数据库:

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

当前回答

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

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

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

其他回答

I had a similar issue with restoring using SQL Management Studio. I tried to restore a backup of the database to a new one with a different name. At first this failed and after fixing the new database's file names it was successfully performed - in any case the issue I'm describing re-occurred even if I got this right from the first time. So, after the restoration, the original database remained with a (Restoring...) next to its name. Considering the answers of the forum above (Bhusan's) I tried running in the query editor on the side the following:

RESTORE DATABASE "[NAME_OF_DATABASE_STUCK_IN_RESTORING_STATE]"

这解决了问题。一开始我遇到了麻烦,因为数据库名称包含特殊字符。我通过在周围添加双引号来解决这个问题-单引号将不起作用,给出“错误的语法接近……”错误。

这是我尝试解决这个问题(数据库处于恢复状态)的最小解决方案,我希望它可以应用到更多的情况。

我使用赛门铁克Backup Exec 11d将数据库恢复到SQL Server 2005标准版实例时遇到了这种情况。恢复作业完成后,数据库仍处于“还原”状态。我没有磁盘空间问题——数据库只是没有从“还原”状态中出来。

我对SQL Server实例运行以下查询,发现数据库立即变得可用:

RESTORE DATABASE <database name> WITH RECOVERY

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

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

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

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

RESTORE DATABASE <database name> WITH RECOVERY

数据库消息:

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

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

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

 drop database <dbname> 

在查询窗口中。

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