SQL Server恢复状态

7

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

  • 使用"恢复"还原
  • 使用"无恢复"还原
  • 使用"待命"还原

我一直将其保留在默认值上,但它们都表示什么意思呢?

(最好用通俗易懂的语言解释)

3个回答

9

GateKiller,

简单来说(不是SQLBOL的复制粘贴),让您能够理解以下概念:

使用RESTORE WITH RECOVERY将备份介质文件(例如fulldata.bak)用于将数据库还原到创建该备份文件的时间。如果您想要返回到较早的状态(例如在开发系统时),则这非常有用。

如果您想要将数据库还原到最新数据,即进行系统灾难恢复且不能丢失任何数据,则需要还原该备份,然后还原自该备份以来创建的所有事务日志。这就是使用RESTORE NORECOVERY的情况。它将允许您将更晚的事务日志还原到故障点(只要您拥有它们)。

RECOVERY WITH STANDBY是将数据库还原到部分日期(如上所述的NORECOVERY),但仍允许数据库以只读方式使用的功能。可以继续应用新的事务日志以使其保持最新状态(作为备用服务器)。在需要花费太长时间才能还原完整数据库以便返回操作系统的情况下使用此选项。(例如,如果您有一个多TB的数据库需要16小时才能还原,但可以每15分钟接收事务日志更新)。

这有点像一个镜像服务器,但没有实时发送“每个事务”到备份服务器。


4

您可以将 Microsoft SQL Server 数据库设置为 NORECOVERY、RECOVERY 或 STANDBY 模式。

RECOVERY 是数据库的正常状态,用户可以连接并访问该数据库(只要他们有适当的权限设置)。

NORECOVERY 允许数据库管理员还原其他备份文件,如差异或事务性备份。在数据库处于此状态时,用户无法连接或访问该数据库。

STANDBY 和 NORECOVERY 状态基本相同,但允许用户以只读方式连接或访问数据库。因此,用户只能针对数据库运行 SELECT 命令。这在日志传送中经常用于报告目的。唯一的缺点是,在有用户在数据库中运行查询时,SQL Server 或 DBA 无法还原其他备份文件。因此,如果有很多用户一直访问数据库,则复制可能会落后。


1

从在线书籍上看,我认为读完后它非常清晰明了

NORECOVERY

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

在还原数据库备份和多个事务日志或需要多个RESTORE语句(例如,全面数据库备份后跟随差异数据库备份)时,SQL Server要求在除最终RESTORE语句之外的所有语句中使用WITH NORECOVERY选项。

请注意,在指定NORECOVERY选项时,数据库在此中间状态下不可用。

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

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

使用文件还原序列,并且在两个还原操作之间不打算使用数据库。

RECOVERY

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

如果计划进行后续的RESTORE操作(从差异备份还原日志或还原数据库),则应指定NORECOVERY或STANDBY。

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

STANDBY = undo_file_name

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

STANDBY允许在事务日志还原之间将数据库带到只读访问状态,并可用于温暖备用服务器情况或特殊恢复情况,在这些情况下,检查数据库在日志还原之间是有用的。

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

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

重要提示:如果指定的撤销文件名所在驱动器上的可用磁盘空间已耗尽,则还原操作将停止。

当需要进行数据库升级时,不允许使用STANDBY。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接