首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >恢复的三个阶段:分析阶段、重做阶段,最后是撤消阶段

恢复的三个阶段:分析阶段、重做阶段,最后是撤消阶段
EN

Stack Overflow用户
提问于 2010-03-06 13:00:38
回答 2查看 33.7K关注 0票数 3

SQL Server数据库恢复由三个阶段组成:分析阶段、重做阶段,最后是撤消阶段。

谁能就这三个恢复阶段给出一个清晰的解释或一个很好的联系?

EN

回答 2

Stack Overflow用户

发布于 2014-10-08 18:24:15

您可能会发现这个文档很有趣:Simple overview of the SQL Server Recovery Process

恢复阶段

恢复算法基于事务日志中的最后一个检查点分为3个阶段。

阶段1:分析。从事务日志中的最后一个检查点开始。此过程确定并构造一个脏页表(DPT),该表由SQL Server停止时可能已脏的页组成。在SQL Server停止时,还会为未提交的事务生成活动事务表。

阶段2:重做。此阶段将数据库恢复到SQL服务停止时的状态。此前向传递的起始点是最早的未提交事务。DPT中的最小日志序列名称(每个日志记录都标有LSN)是SQL Server首次期望必须在页面上重做操作,即从最早的打开事务开始重做记录的操作,以便获得必要的锁。

阶段3:撤消:在这里,在阶段1中标识的活动事务(在SQL Server弯折时未提交)的列表将被单独回滚。SQL Server跟踪每个事务的事务日志条目之间的链接。在SQL Server停止时未提交的任何事务都将被撤消。

恢复可以在恢复数据库时执行,但也可以在数据库启动时执行(崩溃恢复)。

票数 1
EN

Stack Overflow用户

发布于 2015-05-04 04:41:25

关于redo和Commit之间的区别:Commit仅仅意味着您已经生成了指示事务完成的日志记录,并将其刷新到磁盘(它现在是持久化数据)。这并不意味着您在事务中更改的数据将写入磁盘。数据将被异步刷新,具体取决于缓冲区和检查点上的压力。

因此,当SQL崩溃并重新启动时,您将丢失所有未刷新的数据更改。因此,您现在必须重做自上次刷新以来的所有日志记录。这是恢复中的重做阶段(阶段2)。在此操作完成之前,您的数据库将不可用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2391399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档