暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

【译】 SQL SERVER快速恢复 – 它是什么?何时需要它?

原创 沐言倾心 2022-03-24
734

原文地址: https://dzone.com/articles/sql-server-fast-recovery-what-is-it-and-when-is-it
原文作者: Priyanka Chauhan

在本文中,请阅读SQLServer快速恢复功能的概述,并了解何时使用、或不用此功能。

  • 快速恢复是SQLServer企业版中的一项功能,它允许在Undo(即未提交的事务回滚)阶段完成之前,一旦Redo(即前滚事务)完成即可访问数据库。本文将详细讨论SQLServer快速恢复功能、何时使用以及何时无法使用。此外,本文还讨论了在快速恢复失败时数据库还原的替代方法。

在我们继续之前

让我们快速概览一下SQLServer恢复过程,该过程包括以下三个阶段:

分析

顾名思义,此阶段旨在分析事务日志。它确定最后一个检查点并创建脏页表(DPT)。该表记录了有关SQLServer停止运行时此脏页的信息。它还生成另一张表,其中包含有关SQLServer停止时的乐观事务(未提交)信息。

重做(Redo)阶段

此阶段将数据库还原到SQLServer服务停止、数据库已关闭前的状态。在此期间,将前滚那些修改并记录在日志文件中,可能还未写入到数据库的事务。

撤销(Undo)阶段

在此阶段中,事务将回滚到阶段1(分析阶段)中未提交的时候。
在所有阶段完成后,数据库变为可用状态。但是企业版中,数据库在REDO阶段之后将立即联机。

何时使用SQLServer快速恢复?

SQLServer2005中引入的快速恢复功能,可确保企业环境中的数据库在重做阶段(Redo)之后联机,然后完成撤销阶段(Undo)。

快速恢复功能允许SQL数据库重新联机。当启动SQLServer实例并运行数据库进行恢复的过程中,下列任何一种情况下,都会执行联机操作:

  • 服务器崩溃或系统关闭不正常
  • 高可用性和灾难恢复解决方案的故障转移(如数据库镜像、集群或可用性故障转移)
  • 当需要对状态已更改为“联机”状态的数据库执行崩溃恢复时

什么时候不使用SQLServer快速恢复?

通过备份还原数据库,或尝试从备份还原日志传送的辅助数据库让该数据库联机时,我们不能使用SQL数据库的快速恢复功能。

为什么不能使用快速恢复进行数据库还原

快速恢复由于其底层机制对还原操作的执行是没有帮助的。对数据库进行修改所有执行的操作都需要记录。其中有一个日志记录会包含数据库上持有的锁的详细信息。在SQLServer崩溃恢复期间,执行撤销阶段(Undo)所需的所有锁也由Redo阶段获取。实质上,Redo阶段可以检测到需要在恢复的日志中回滚的事务。因此,当Redo阶段即将完成时,数据库是可访问的。因为快速恢复可以保证Undo阶段不被任何用户锁定,而且Undo阶段的锁定已保留。

想知道为什么这个机制不适用于快速恢复?

Redo操作不会获取Undo锁,因为Undo不太可能是数据库还原过程中的下一阶段。上一次还原结束时的某些未提交的事务,很可能在下次还原之前提交。因此,如果获取了任何Undo锁,则需要释放它们,这需要重新扫描日志记录或跟踪有哪些恢复中的事务已获取锁。

这就是快速恢复不支持数据库还原的原因。

尾注

在企业环境中,SQLServer快速恢复是针对数据库崩溃恢复执行的一项有益的功能。

最后修改时间:2022-03-25 09:38:01
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论