SQL Server 中的崩溃恢复过程如何工作?

Rau*_*DBA 2 sql-server transaction recovery transaction-log

我想问一个关于恢复数据库操作时恢复过程的问题。假设我恢复了一个完整备份,NORECOVERY然后使用NORECOVERY. 最后,我将使用RECOVERY关键字恢复最后的第三个 t-log 备份。

问题是:当我使用RECOVERY关键字恢复最后一个 t-log 备份时,SQL Server 执行重做和撤消阶段还是只执行撤消阶段?

在我看来,当我们使用NORECOVERY关键字恢复备份时,SQL Server 也会执行重做阶段。与使用standby 关键字恢复t-log 备份相同。在这种情况下,SQL Server 会创建一个单独的文件,其名称仅包含“ undo ”而不包含任何“ redo ”。

Ron*_*ldo 7

RESTORE Statements doc的比较 RECOVERY 和 NORECOVERY部分应该可以帮助您解决这个问题:

回滚由 RESTORE 语句通过 [ RECOVERY | ] 控制。NORECOVERY ] 选项:

  • NORECOVERY 指定不发生回滚。这允许前滚继续执行序列中的下一个语句。

    在这种情况下,还原序列可以还原其他备份并将它们前滚。

  • RECOVERY(默认)表示在当前备份完成前滚后执行回滚。

    恢复数据库要求正在恢复的整个数据集(前滚集)与数据库一致。如果前滚集尚未前滚到足以与数据库保持一致并且指定了 RECOVERY,则数据库引擎会发出错误。