当前位置:  开发笔记 > 编程语言 > 正文

SQL Server:数据库陷入"恢复"状态

如何解决《SQLServer:数据库陷入"恢复"状态》经验,为你挑选了12个好方法。

我备份了一个数据库:

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

Evan Anderso.. 674

我有这种情况使用Symantec Backup Exec 11d将数据库还原到SQL Server 2005 Standard Edition实例.还原作业完成后,数据库仍处于"正在恢复"状态.我没有磁盘空间问题 - 数据库根本没有出现"恢复"状态.

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

RESTORE DATABASE  WITH RECOVERY

+1,带有陷阱.当我运行它时,我收到一条错误消息,指出数据库已经完全恢复.但它仍显示为"处于恢复状态".所以我在Management Studio中右键单击它,点击刷新,它恢复正常. (10认同)

我们有一个数据库卡在恢复2小时.我们从一台不同的机器对着master运行了这个命令,它就把我们修好了.谢谢! (4认同)

这很有效.我试图将备份恢复到边数据库,但我的主数据库由于某种原因进入恢复状态.这实际上恢复了我的数据库 谢谢你! (3认同)

我使用Mng Studio向导进行了恢复,输入了一个新的数据库名称,但错误地将文件名保留为与现有数据库相同.我收到错误"恢复失败但日志尾部成功",并且附加到这些文件的数据库卡在恢复状态.此命令似乎已将数据库还原到其先前状态. (2认同)

某些SSMS还原向导默认设置将使源数据库处于还原状态,以便您可以继续还原各种备份或日志而不必担心用户,并且此命令是完成后将数据库恢复正常的正确方法. (2认同)


John Sansom.. 428

您需要使用WITH RECOVERY数据库RESTORE命令选项将数据库作为还原过程的一部分联机.

这当然只有在您不打算恢复任何事务日志备份时,即您只希望还原数据库备份然后才能访问数据库.

你的命令应该是这样的,

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE,RECOVERY

您可以使用SQL Server Management Studio中的还原数据库向导进行更多操作.这样,您可以选择特定文件位置,覆盖选项和WITH Recovery选项.



1> Evan Anderso..:

我有这种情况使用Symantec Backup Exec 11d将数据库还原到SQL Server 2005 Standard Edition实例.还原作业完成后,数据库仍处于"正在恢复"状态.我没有磁盘空间问题 - 数据库根本没有出现"恢复"状态.

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

RESTORE DATABASE  WITH RECOVERY


+1,带有陷阱.当我运行它时,我收到一条错误消息,指出数据库已经完全恢复.但它仍显示为"处于恢复状态".所以我在Management Studio中右键单击它,点击刷新,它恢复正常.
我们有一个数据库卡在恢复2小时.我们从一台不同的机器对着master运行了这个命令,它就把我们修好了.谢谢!
这很有效.我试图将备份恢复到边数据库,但我的主数据库由于某种原因进入恢复状态.这实际上恢复了我的数据库 谢谢你!
我使用Mng Studio向导进行了恢复,输入了一个新的数据库名称,但错误地将文件名保留为与现有数据库相同.我收到错误"恢复失败但日志尾部成功",并且附加到这些文件的数据库卡在恢复状态.此命令似乎已将数据库还原到其先前状态.
某些SSMS还原向导默认设置将使源数据库处于还原状态,以便您可以继续还原各种备份或日志而不必担心用户,并且此命令是完成后将数据库恢复正常的正确方法.

2> John Sansom..:

您需要使用WITH RECOVERY数据库RESTORE命令选项将数据库作为还原过程的一部分联机.

这当然只有在您不打算恢复任何事务日志备份时,即您只希望还原数据库备份然后才能访问数据库.

你的命令应该是这样的,

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE,RECOVERY

您可以使用SQL Server Management Studio中的还原数据库向导进行更多操作.这样,您可以选择特定文件位置,覆盖选项和WITH Recovery选项.


是的,我使用的是NORECOVERY,但恢复过程仍然存在.使用WITH RECOVERY,REPLACE它不再挂起进程
在做他正在做的事情时,我从来没有必要使用恢复声明.WITH REPLACE就足够了.
@FistOfFury如果同一数据库上的先前还原操作处于挂起/休眠状态,则为是.简单地停止/取消正在进行的恢复应该具有相同的效果.

3> 小智..:

这是你如何做到的:

    停止服务(MSSQLSERVER);

    重命名或删除数据库和日志文件(C:\ Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data ...)或您拥有文件的位置;

    启动服务(MSSQLSERVER);

    删除有问题的数据库;

    再次还原数据库.

祝好运!


为什么不放弃数据库呢?这样您就不必停止服务了.
@ErikE对我来说,SQL服务器说它不能在恢复过程中删除数据库,即使它没有真正恢复....
就我而言,在查询窗口中使用SQL命令`drop database `删除挂起状态"Restoring ..."的数据库就足够了.然后我右键单击*Databases*并选择*Refresh*删除了Management Studio中的条目.之后我做了一个新的恢复工作正常(**注意**使它脱机无法工作,重新启动SQL服务不起作用,服务器重启也不起作用).

4> 小智..:

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

RESTORE DATABASE  WITH RECOVERY

数据库消息:

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

在那18秒之后,数据库再次可用.


您已经恢复数据库但忘记了RECOVERY选项时特别有用......
在将此数据库的备份还原到其他数据库名称后,这就是我需要让它退出"恢复"状态.谢谢一堆.

5> Demetris Lep..:

我在使用SQL Management Studio进行恢复时遇到了类似的问题.我尝试将数据库的备份还原到具有不同名称的新备份.起初这个失败了,在修复了新数据库的文件名后,它成功地执行了 - 无论如何,即使我从第一次开始这样做,我所描述的问题也重新出现了.因此,在恢复之后,原始数据库保留在其名称旁边的(恢复...).考虑到上面论坛的答案(Bhusan's),我尝试在下面的查询编辑器中运行:

RESTORE DATABASE "[NAME_OF_DATABASE_STUCK_IN_RESTORING_STATE]"

这解决了这个问题.我起初遇到麻烦,因为数据库名称包含特殊字符.我通过添加双引号来解决这个问题 - 单引号不会产生"错误的语法接近..."错误.

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


工作得很完美 - 无需再将其撕下来.3 Dbs 80+ Gb每个需要一段时间!谢谢!

6> 小智..:

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

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

Drop database *dbname*



7> 小智..:

执行RESTORE DATABASE/RESTORE LOG命令时,默认情况下使用WITH RECOVERY选项.如果您陷入"恢复"过程,则可以通过执行以下操作将数据库恢复为联机状态:

RESTORE DATABASE YourDB WITH RECOVERY
GO

如果有需要多个文件恢复,CLI命令需要带恢复并分别与恢复 - 仅在命令的最后一个文件应该恢复中带回数据库联机:

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



8> TrailJon..:

这可能是相当明显的,但它刚刚让我感到沮丧:

如果您正在进行尾部日志备份,则在SSMS还原向导中选中此选项会导致此问题 - "将源数据库保留在还原状态(WITH NORECOVERY)"

在此输入图像描述


如果您处于此状态,那么最好的办法是:1.右键单击数据库,转到任务 - >还原 - >事务日志2.找到用于备份日志备份的备份文件3.还原备份还原应该成功并使数据库重新联机.

9> Ian Boyd..:

我弄明白了为什么.

如果RESTORE DATABASE在还原过程中发出命令的客户端断开连接,则还原将被卡住.

奇怪的是,服务器在被告知通过客户端连接恢复数据库时,将无法完成恢复,除非客户端始终保持连接状态.


所有SQL命令都要求客户端始终保持连接状态.
@mrdenny:我会假设当客户端断开连接时,更改将被取消.

10> 小智..:

这个确实奏效了:

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

我的情况是我的数据库显示恢复状态,我无法运行任何查询,无法连接我们的软件.

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

    从Windows服务停止所有SQL相关服务.

    我打开了Ldf和Mdf文件驻留在SQL目录中的DATA文件夹,通常是这样的:"C:\ Program Files***********\MSSQL\DATA

    然后我复制了数据库的Ldf和Mdf文件:[db name] .mdf和[db name] _log.ldf

我将这两个文件复制到另一个文件夹.

    然后我再次从Windows服务启动了所有SQL相关服务(在步骤1中).

    通过正常登录启动我的MS SQL Management工作室.

    右键单击罪魁祸首数据库并点击DELETE(完全删除数据库).

    与此数据库相关的所有LDF和MDF文件都已从DATA文件夹(在步骤2中提到)中删除.

    创建了一个具有相同名称的新数据库(与我在步骤6中删除的名称相同 - 罪魁祸首数据库).

    然后[数据库名称] - >右键单击 - >任务 - >脱机.

    然后我将两个文件(从步骤3)复制回DATA文件夹(步骤2).

    [数据库名称] - >右键单击 - >任务 - >联机.



11> Ashkan Sirou..:

我曾有一个 .在我的数据库名称中,并且查询因此而无法工作(在'.'附近说错误的语法)然后我意识到我需要一个名称的括号:

RESTORE DATABASE [My.DB.Name] WITH RECOVERY



12> Matt..:

就我而言,使用SQL命令删除挂起状态为“正在还原...” 的数据库就足够了

 drop database  

在查询窗口中。

然后,我右键单击“ 数据库”,然后选择“ 刷新”,这将删除Management Studio中的条目。之后,我进行了一个新的还原,该还原工作正常(请注意,使其脱机不起作用,SQL服务的重新启动不起作用,服务器重新启动也不起作用)。

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有