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



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

#1 楼

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

数据库现在正在等待最新的事务日志文件。 >
您可以:




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


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

有关详细信息,请参见此内容:库/ms177446.aspx
https://stackoverflow.com/questions/520967/sql-server-database-stuck-in-restoring-state


评论


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

– NateJ
16-2-26在1:18

“通过执行以下命令来使数据库退出恢复模式:RESTORE DATABASE YourDb WITH RECOVERY”。 20分钟的头部刮擦和重新启动服务,然后用一根衬管固定。谢谢!

– Echilon
17年2月15日在9:14

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

– Moiz Tankiwala
17年2月17日在6:20

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

– CodeManX
17年5月10日在8:56

#2 楼

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

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

RESTORE DATABASE [DataBase Name] WITH RECOVERY;


评论


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

–user53174
2014年11月30日20:54

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

– David Spillett
2014年11月30日在21:01

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

–伊恩·博伊德(Ian Boyd)
16-09-22在20:18

完美的解决方案,谢谢!

–侯赛因·阿米尼
19年11月23日19:39

#3 楼

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

ALTER DATABASE DBName SET ONLINE;


显然,破坏了NetBackup的还原使其处于一种奇怪的状态。没有其他解决方案有效(尽管我还没有尝试过重新启动SQL Server服务)

我会谨慎对待数据库,但是,理论上,一旦还原开始,然后失败,您可能已经损坏的数据。无论如何,我还是要再次还原数据库,所以对我来说没有关系。

评论


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

–詹姆斯·詹金斯(James Jenkins)
19年1月17日在17:48

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

– ErikE
19年1月20日在7:21

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

– ErikE
19年1月20日在7:29

#4 楼

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

示例:

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


让我们看一下使用NO恢复进行还原的要点


数据库不可用
仍处于还原模式下
下一个还原序列可以完成
不回滚任何未提交的事务

使用NoRecovery进行还原

此选项特别在要还原多个备份时使用。这意味着,当您执行带有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


评论


您的答案可能有误。标有...关于使用恢复还原的部分列出了适用于RESTORE ... WITH NORECOVERY选项的所有选项。你能再检查一遍吗?

– John K. N.
18/12/10在14:05