我备份了一个数据库:

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

当前回答

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

 drop database <dbname> 

在查询窗口中。

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

其他回答

你试过运行验证吗?确保这是声音备份。

http://msdn.microsoft.com/en-us/library/ms188902.aspx

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

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

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

这个方法奏效了:

http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/8dd1b91d-3e14-4486-abe6-e3a550bfe457

我有一个情况,我的数据库显示恢复状态,我不能运行任何查询,不能与我们的软件连接。

为了摆脱这种情况,我所做的是:

停止windows服务中的所有SQL相关服务。 我打开了数据文件夹,其中Ldf和Mdf文件驻留在SQL目录中,通常是这样的: “C: \程序文件 ***********\ 该软件\数据 然后我复制了数据库的Ldf和Mdf文件: (数据库名称)。MDF和[db name]_log.ldf

我把这两个文件都复制到另一个文件夹。

Then I started all the SQL related services (in step 1) again from windows services. Started my MS SQL Management studio with normal login. Right click on the culprit database and hit DELETE (to delete the database at all). All the LDF and MDF files related to this database have gone from DATA folder (mentioned in step 2). Created a new database with the same name (same name of the one I deleted in step 6 - the culprit database). Then [database name]->right click -> tasks -> Take Offline. I then Copied both the files (from step 3) back to the DATA folder (step 2). [database name]->right click -> tasks -> Bring Online.

执行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恢复。如果要处理大量备份,虚拟恢复是一个很好的解决方案。恢复过程要快得多,还可以节省磁盘驱动器上的大量空间。你可以看看这里的信息图进行一些比较。

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

RESTORE DATABASE [DatabaseName] WITH RECOVERY