SQL Server数据库恢复由三个阶段组成:分析阶段、重做阶段,最后是撤消阶段。
谁能就这三个恢复阶段给出一个清晰的解释或一个很好的联系?
发布于 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停止时未提交的任何事务都将被撤消。
恢复可以在恢复数据库时执行,但也可以在数据库启动时执行(崩溃恢复)。
发布于 2015-05-04 04:41:25
关于redo和Commit之间的区别:Commit仅仅意味着您已经生成了指示事务完成的日志记录,并将其刷新到磁盘(它现在是持久化数据)。这并不意味着您在事务中更改的数据将写入磁盘。数据将被异步刷新,具体取决于缓冲区和检查点上的压力。
因此,当SQL崩溃并重新启动时,您将丢失所有未刷新的数据更改。因此,您现在必须重做自上次刷新以来的所有日志记录。这是恢复中的重做阶段(阶段2)。在此操作完成之前,您的数据库将不可用。
https://stackoverflow.com/questions/2391399
复制相似问题