(26)redo和undo区别
redo(重做):1)改后备份,保证事的持久化,一直写。保证事务持久性,
2)记录:db变化日志,表、索引、undo数据块。nologging除外
undo(撤销还原):1)改前备份 保证事务原子性。
2)记录:undo段,为保持读一致性的存历史数据
ps:为什么要保持读一致性?
A更改,B查询,并发: A改没提交,B查历史 / rollback数据(源于UNDO)
一、Undo + Redo事务简化过程
A=1,B= 2 事务开始
记录A=1到undo log 改A=3. 记录A=3到redo log
记录B=2到undo log 改B=4 记录B=4到redo log
redo log写入磁盘 事务提交
二、Undo + Redo事务特点
1、事务提交(或每秒刷盘)前将Redo Log持久化
2、事务提交前缓存在内存中,不写磁盘。sync_binlog决定何时刷盘
三、undo与redo流程联系:
问题:没commit前,随时从内存写入表数据块,属于脏数据。
解决:db崩溃用redo,脏数据还在,靠undo旧数据覆盖(用rollback)
不管脏/旧,redo都复制
1.undo是“数据文件datafile”,有表空间,有块block;
2.redo是“文件file”,没表空间
四、前滚与回滚:
前滚:从以前“正常点”,前滚到崩溃点
回到正常点(一致点),数据清空,相当于之后什么都没发生。db用redo里重做(use redo log to redo),构造undo块,表块,索引块
回滚:从“崩溃点”往后,到一致
表数据块中,已修改未提交脏数据,前滚undo块撤销还原,覆盖回滚rollback(保持一致性,每种块scn号都一样,db就可打开)
https://blog.csdn.net/z69183787/article/details/106638592/
https://blog.csdn.net/haiross/article/details/17003543