SQL Server数据库处于还原状态


79

我有一个SharePoint服务器。备份工具出现问题,现在我的某些数据库处于还原状态!

该图显示了还原数据库

是否可以停止还原过程?而且,如何确保数据库完整性没有受到损害?

Answers:


129

这很可能是由于还原脚本添加了WITH NORECOVERY参数,以使数据库准备好在事务处理后应用事务日志。

现在,数据库正在等待最新的事务日志文件。

您可以:

  1. 使用RESTORE LOG database_name FROM backup_device WITH RECOVERY;... 应用最新的事务日志,或者
  2. 再次还原数据库,但这一次使用... WITH RECOVERY;...或
  3. 通过执行以下命令,使数据库退出恢复模式: RESTORE DATABASE YourDb WITH RECOVERY;

在执行此操作之前,请确保您了解这些选项的含义。如果不小心,可能会导致数据丢失。

详情请参见:


如果这些方法不起作用,请参见dba.stackexchange.com/questions/11175/…-如果您不知道自己在做什么并且了解丢失数据的全部风险,则再次提一下 “ DOOM的警告”。但是,如果您处于非生产服务器上的绑定中,那么您将获得良好的备份以从中进行全新还原,并且您有能力在该服务器上重新启动SQL,它可以正常工作。
NateJ '16

6
“通过执行以下命令来使数据库退出还原模式:RESTORE DATABASE YourDb WITH RECOVERY”。刮擦和重启服务20分钟,然后用一根衬管固定。谢谢!
Echilon '02

2
我在开发箱中遇到了同样的情况。选项3就像魅力一样!
Moiz Tankiwala

我试图将数据库从.bak还原到数据库中,但是忘记更改磁盘上的文件名。还原失败,尽管不是因为现有数据库正在使用文件,而是其他一些错误。这弄乱了现有的数据库(处于还原状态)。#3一秒钟将其重新联机,然后检查数据,一切看起来都很好。谢谢!
CoDEmanX

44

解决此问题的简单T-SQL脚本:

在“新查询”窗口上编写此脚本并执行:

RESTORE DATABASE [DataBase Name] WITH RECOVERY;

具有恢复功能的RESTORE DATABASE [database_name] ....对我来说完美。谢谢!

10
要非常小心地了解其含义。如果数据库正在等待日志还原,则可能会导致大量数据丢失。
David Spillett 2014年

2
由于错误“无法恢复数据库,因为未还原日志”而无法工作。
伊恩·博伊德

0

我只是遇到这种情况,而且治愈方法非常令人惊讶:

ALTER DATABASE DBName SET ONLINE;

显然,中断的NetBackup还原使它处于怪异状态。没有其他解决方案有效(尽管我尚未尝试重新启动SQL Server服务)

不过,我会谨慎对待数据库,因为从理论上讲,一旦还原开始,然后失败,则可能损坏了数据。无论如何,我还是要再次还原数据库,所以这对我来说无关紧要。


对于此问题,这是错误的答案,如果您尝试设置在线“正在还原”中的数据库,则会收到错误“数据库处于还原状态时不允许ALTER DATABASE”。
James Jenkins

也许您不熟悉StackOverflow上的方法,有时我们回答的问题与发布的问题略有不同。这提供了价值,因为人们在在线搜索后经常会遇到与他们相似的问题。关于你提到的有关事实根据的声称ALTER DATABASE不允许这样做,我向你保证,在我的情况下,数据库实际上显示在恢复状态,并使用SET ONLINE事实上的工作。因此,请意识到您称我为错误或撒谎。当有替代方案时,您真的需要做的是吗?
ErikE

@JamesJenkins那还有什么选择?另一种选择是这样的假设:数据库可以在状态还原中显示,但实际上没有还原。也可以是还原的最后一步,还原实际上已完成,因此可以将其实际设置为ONLINE状态。长话短说,我认为您对此网站的评论和投票不合时宜,您的信息实际上是错误的,因为它与我提供的数据不符。
ErikE

0

众所周知,默认的数据库还原选项与Recovery一起使用,可确保数据库还原完成后数据库可用并可以联机使用。

例:

RESTORE DATABASE YourDB FROM DISK= 'C:\\Data\\YourDBBackup.bak'
WITH RECOVERY
GO

让我们来看看有关无恢复还原的要点

  • 数据库不可用
  • 保持还原模式
  • 下一个还原序列可以完成
  • 不回滚任何未提交的交易

还原无恢复

此选项特别在要还原多个备份时使用。这意味着,当您执行带有norecovery选项的restore命令时,意味着直到顺序恢复上一次备份后,数据库才会释放给用户。在上次备份中,使用了“恢复”选项,并且数据库联机。

例:

RESTORE DATABASE YourDB FROM DISK - 'C:\\Data\\Backup_part1.bak' 
WITH NORECOVERY
GO

接着:

RESTORE LOG YourDB FROM DISK = 'C:\\Data\\BackupLog-part2.trn'
WITH RECOVERY
GO

1
您的答案可能有误。标记为...关于使用恢复还原的部分列出了适用于该RESTORE ...WITH NORECOVERY选项的所有选项。你能再检查一遍吗?
hot2use
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.