一旦用户发出提交命令,那么事务就是第一个 写入存储在非易失性介质上的数据库文件 硬盘,在确认用户保存之前完成 已经发生了。如果数据库在保存之前崩溃,则数据仍然存在 在下次重新启动数据库时,在事务日志上,但是 任何未提交的更改都将被撤消或回滚。
现在,当用户在步骤4提交时,
以上理解是否正确?如果是,我的问题为什么不在步骤3之后发送确认?如果DB机器在T2之前崩溃,那么交易会不会持久? 因此,对于日志,我们只是确保DB在时间T2和T3时崩溃,然后我们可以确保持久性
第二个理解 我相信一旦语句被触发而不是在提交时执行它,所有事务语句都可以写在日志中。提交完成后,事务日志将被标记为提交并发送确认。现在,即使数据库在确认后崩溃,DB也会确保从事务日志中写入DB文件。因此,基本上不是在提交时一次写入所有事务语句,而是在它们触发时,Db在日志中写入语句。在提交时,它只是将这些事务标记为提交,并最终将从日志
中的db块中写入这个问题来自oracle的观点
答案 0 :(得分:0)
你的第二个理解很接近。
你提到的文章也说
提交完成时通常可以实现现代关系数据库系统的耐用性 通过事务日志 - 可循环使用的文件 - 用于存储的文件 所有数据库事务在会话中
否,
但是,如果数据库在步骤1本身之前崩溃,那么即使在启动时它也不会被保留,因为它没有在事务日志中写入