我备份了一个数据库:

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

当前回答

为我解决问题的是

停止实例 在data文件夹中创建.mdf和.ldf文件的备份 重新启动实例 删除恢复卡住的数据库 把。mdf和。LDF文件返回到数据文件夹 将实例附加到.mdf和.ldf文件

其他回答

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

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

你可以这样做:

停止服务(MSSQLSERVER); 重命名或删除数据库和日志文件(C:\Program files \Microsoft SQL Server\MSSQL.1\MSSQL\Data…)或任何你有文件的地方; 启动服务(MSSQLSERVER); 删除有问题的数据库; 重新恢复数据库。

我已经得到了MyDbName(恢复…)情况,因为SQL Express许可限制。

在日志文件中,我发现了这个:

创建数据库或更改数据库失败,因为结果 累积数据库大小将超过您的许可限制10240 MB 每个数据库。

因此,如果您试图恢复一个更大的数据库,您需要将SQL Express服务器切换到开发人员版本。

请使用以下命令解决此问题

RESTORE DATABASE [DatabaseName] WITH RECOVERY

在使用SQL server management studio恢复数据库时遇到了类似的问题,它陷入了恢复模式。经过几个小时的问题跟踪,下面的查询对我有用。下面的查询将数据库从现有备份恢复到以前的状态。我相信,关键在于.mdf和.log文件在同一个目录下。

RESTORE DATABASE aqua_lc_availability
FROM DISK = 'path to .bak file'
WITH RECOVERY