恢复SQL Server数据库时,我注意到有3种不同的恢复状态可供选择:
我总是将它保留为默认值,但这些都意味着什么?
(最好以外行人的话说)
答案 0 :(得分:7)
GateKiller,
简单来说(而不是SQLBOL中的复制粘贴),因此您可以理解这些概念:
RESTORE WITH RECOVERY使用备份媒体文件(例如,fulldata.bak)将数据库还原到备份文件的创建时间。如果您想及时将数据库恢复到早期状态(例如开发系统时),那就太棒了。
如果要将数据库恢复到非常最新的数据(例如,如果您执行系统灾难恢复并且不能丢失任何数据),那么您希望恢复该备份,然后恢复自该备份以来创建的所有事务日志。这是当您使用RESTORE NORECOVERY时。它将允许您恢复以后的事务日志,直到故障点(只要您拥有它们)。
使用STANDBY恢复能够将数据库恢复到一个临时日期(如上面的NORECOVERY),但允许数据库仍然是READONLY使用。新的事务日志仍然可以应用于数据库以使其保持最新(备用服务器)。当恢复完整数据库以便返回操作系统需要很长时间时使用此选项。 (即,如果您有一个多TB数据库,需要16个小时才能恢复,但每15分钟可以接收一次事务日志更新)。
这有点像镜像服务器 - 但没有“每一笔交易”实时发送到备份服务器。
答案 1 :(得分:4)
您可以将Microsoft SQL Server数据库设置为处于NORECOVERY,RECOVERY或STANDBY模式。
RECOVERY是用户可以连接和访问数据库的数据库的正常和通常状态(假设他们已经设置了适当的权限)。
NORECOVERY允许数据库管理员恢复其他备份文件,例如差异备份或事务备份。当数据库处于此状态时,用户将无法连接或访问此数据库。
STANDBY与NORECOVERY状态几乎相同,但它允许用户以READONLY访问方式连接或访问数据库。因此用户只能对数据库运行SELECT命令。这在日志传送中经常用于报告目的。唯一的缺点是,虽然数据库中有用户运行查询SQL Server或DBA无法还原其他备份文件。因此,如果您有许多用户一直访问数据库,那么复制可能会落后。
答案 2 :(得分:1)
来自书籍在线,我认为你阅读后很清楚
<强> NORECOVERY 强>
指示还原操作不回滚任何未提交的事务。如果必须应用另一个事务日志,则必须指定NORECOVERY或STANDBY选项。如果既未指定NORECOVERY,RECOVERY或STANDBY,则RECOVERY为默认值。
SQL Server要求在还原数据库备份和多个事务日志时,或者在需要多个RESTORE语句时(例如,完整数据库备份后跟差异数据库),在除最终RESTORE语句之外的所有语句上使用WITH NORECOVERY选项备份)。
注意指定NORECOVERY选项时,数据库在此中间未恢复状态下不可用。
当与文件或文件组还原操作一起使用时,NORECOVERY会强制数据库在还原操作后保持还原状态。这在以下任何一种情况下都很有用:
正在运行还原脚本,并且始终会应用日志。
使用一系列文件还原,并且数据库不能在两个还原操作之间使用。
<强> RECOVERY 强>
指示还原操作回滚所有未提交的事务。在恢复过程之后,数据库就可以使用了。
如果计划后续的RESTORE操作(RESTORE LOG,或差异的RESTORE DATABASE),则应指定NORECOVERY或STANDBY。
如果未指定NORECOVERY,RECOVERY或STANDBY,则RECOVERY为默认值。从早期版本的SQL Server还原备份集时,可能需要进行数据库升级。指定WITH RECOVERY时,将自动执行此升级。有关更多信息,请参阅事务日志备份。
STANDBY = undo_file_name
指定撤消文件名,以便撤消恢复效果。撤消文件所需的大小取决于未提交事务导致的撤消操作量。如果既未指定NORECOVERY,RECOVERY或STANDBY,则RECOVERY为默认值。
STANDBY允许在事务日志恢复之间启用数据库以进行只读访问,并且可以与热备份服务器情况或特殊恢复情况一起使用,在这种情况下,在日志恢复之间检查数据库很有用。
如果指定的撤消文件名不存在,SQL Server会创建它。如果该文件存在,SQL Server将覆盖它。
相同的撤消文件可用于同一数据库的连续恢复。有关更多信息,请参阅使用备用服务器。
重要说明如果包含指定撤消文件名的驱动器上的可用磁盘空间已用尽,则还原操作将停止。
当需要进行数据库升级时,不允许STANDBY。