Database 在基于日志的恢复中,我们为什么要重做已提交的事务?

Database 在基于日志的恢复中,我们为什么要重做已提交的事务?,database,commit,distributed-transactions,undo-redo,data-recovery,Database,Commit,Distributed Transactions,Undo Redo,Data Recovery,日志是一系列日志记录,用于维护有关数据库上更新活动的信息。每当事务启动、读取、写入或提交时,它都会在日志中注册自己的特定操作。因此,现在当从失败中恢复时,如果事务尚未提交,则需要撤消该事务;如果事务已提交,则需要重做该事务。我怀疑这样做背后的逻辑。为什么我们需要重做已提交的事务 参考:幻灯片19-对于事务T1,其所有日志记录可能已输出到稳定存储器,但数据的实际更新仍在主存储器中。如果此时发生故障,则重做此事务将确保由于故障而几乎丢失的所有更新现在都会写入稳定存储器。已提交事务的数据更改存储在SG

日志是一系列日志记录,用于维护有关数据库上更新活动的信息。每当事务启动、读取、写入或提交时,它都会在日志中注册自己的特定操作。因此,现在当从失败中恢复时,如果事务尚未提交,则需要撤消该事务;如果事务已提交,则需要重做该事务。我怀疑这样做背后的逻辑。为什么我们需要重做已提交的事务


参考:幻灯片19-

对于事务T1,其所有日志记录可能已输出到稳定存储器,但数据的实际更新仍在主存储器中。如果此时发生故障,则重做此事务将确保由于故障而几乎丢失的所有更新现在都会写入稳定存储器。

已提交事务的数据更改存储在SGA的数据库缓冲区中,数据库编写器(DBWn)后台进程不必立即将数据写入数据文件

因为它们在SGA中,所以其他用户可以看到它们,但如果不立即写入数据文件,这些更改在提交后仍可能丢失。

参考:


图像参考:

在深入研究某个非常具体的问题之前,请从更多的上下文开始。我们先撤消未提交的,然后再重做已提交的-这听起来根本不对。@stuartd耶鲁大学的书中提到了这一点professors@stuartd是的,我提到了你提到的参考资料,非常感谢。不过这有点让我难以理解。这是指部分完成的交易吗?如果您认为这是一个相关的问题,您是否也可以对该问题进行投票。谢谢