SQL Server恢复状态

时间:2020-03-05 18:38:59  来源:igfitidea点击:

还原SQL Server数据库时,我注意到有3种不同的恢复状态可供选择:

  • 恢复还原
  • 恢复无恢复
  • 待机还原

我一直将其保留为默认值,但是它们全都意味着什么呢?

(最好用外行的话)

解决方案

回答

从联机丛书中,我认为我们阅读它后就很清楚了

不可恢复

指示还原操作不回滚任何未提交的事务。如果必须应用另一个事务日志,则必须指定NORECOVERY或者STANDBY选项。如果未指定NORECOVERY,RECOVERY或者STANDBY,则RECOVERY为默认值。

在还原数据库备份和多个事务日志时,或者在需要多个RESTORE语句(例如,完整数据库备份后再进行差异数据库备份)时,SQL Server要求在最终的RESTORE语句之外的所有RESTORE语句上使用WITH NORECOVERY选项。

注意当指定NORECOVERY选项时,该数据库无法在此中间不可恢复状态下使用。

与文件或者文件组还原操作一起使用时,NORECOVERY会强制数据库在还原操作之后保持还原状态。这在以下两种情况下都很有用:

正在运行还原脚本,并且始终在应用日志。

使用了一系列文件还原,并且在两个还原操作之间不希望使用该数据库。

恢复

指示还原操作回滚任何未提交的事务。恢复过程完成后,即可使用数据库了。

如果计划了后续的RESTORE操作(差异日志中的RESTORE LOG或者RESTORE DATABASE),则应指定NORECOVERY或者STANDBY。

如果未指定NORECOVERY,RECOVERY或者STANDBY,则RECOVERY为默认值。从早期版本的SQL Server还原备份集时,可能需要升级数据库。当指定WITH RECOVERY时,此升级将自动执行。有关更多信息,请参见事务日志备份。

STANDBY =撤消文件名

指定撤消文件名,以便可以撤消恢复效果。撤消文件所需的大小取决于未提交的事务导致的撤消操作的数量。如果未指定NORECOVERY,RECOVERY或者STANDBY,则RECOVERY为默认值。

STANDBY允许在事务日志还原之间建立数据库以进行只读访问,并且可以与热备份服务器情况或者特殊恢复情况一起使用,在这种情况下,在日志还原之间检查数据库很有用。

如果指定的撤消文件名不存在,则SQL Server会创建它。如果该文件确实存在,则SQL Server会覆盖它。

相同的撤消文件可用于相同数据库的连续还原。有关更多信息,请参阅使用备用服务器。

重要如果包含指定的撤消文件名的驱动器上的可用磁盘空间已用完,还原操作将停止。

当需要升级数据库时,不允许STANDBY。

回答

GateKiller,

简单来说(而不是从SQLBOL中复制粘贴),因此我们可以理解以下概念:

恢复还原使用备份媒体文件(例如fulldata.bak)将数据库还原到创建备份文件的时间。在这种情况下,还原序列可以还原其他备份并将其前滚。如果我们想及时返回以将数据库还原到较早的状态(如在开发系统时),则非常好。

如果要将数据库还原到非常最新的数据(例如,如果我们进行系统灾难恢复并且不能丢失任何数据),则要还原该备份,然后再备份自该备份以来创建的所有事务日志。这是使用RESTORE NORECOVERY时的情况。它将允许我们还原以后的事务日志,直到出现故障为止(只要我们拥有它们)。

使用STANDBY进行恢复是一种能够将数据库还原到一个暂定日期的功能(例如上面的NORECOVERY),但仍允许该数据库以READONLY的方式使用。仍然可以将新的事务日志应用于数据库,以使其保持最新状态(备用服务器)。当恢复完整数据库以使系统恢复正常运行需要花费太长时间时,请使用此方法。 (即,如果我们有一个多TB数据库,则需要16个小时来还原,但是每15分钟可以接收一次事务日志更新)。

这有点像镜像服务器,但是没有"每笔交易"实时发送到备份服务器。