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 ”。
RESTORE Statements doc的比较 RECOVERY 和 NORECOVERY部分应该可以帮助您解决这个问题:
回滚由 RESTORE 语句通过 [ RECOVERY | ] 控制。NORECOVERY ] 选项:
NORECOVERY 指定不发生回滚。这允许前滚继续执行序列中的下一个语句。
在这种情况下,还原序列可以还原其他备份并将它们前滚。RECOVERY(默认)表示在当前备份完成前滚后执行回滚。
恢复数据库要求正在恢复的整个数据集(前滚集)与数据库一致。如果前滚集尚未前滚到足以与数据库保持一致并且指定了 RECOVERY,则数据库引擎会发出错误。