是否可以停止还原过程?而且,如何确保数据库完整性没有受到损害?
#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
#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
评论
当这些方法不起作用时,请参见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