(26)redo和undo区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(26)redo和undo区别相关的知识,希望对你有一定的参考价值。
参考技术A redo(重做):1)改后 备份,保证事的持久化,一直写。保证事务 持久性,2)记录: db变化日志,表、索引、undo数据块。nologging除外
undo(撤销还原):1)改前 备份 保证事务 原子性 。
2)记录: undo段,为保持读一致性的存 历史数据
ps: 为什么要保持读一致性?
A更改,B查询,并发: A改没提交,B查历史 / rollback数据(源于UNDO)
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写入磁盘 事务提交
1、事务 提交 (或每秒刷盘) 前 将 Redo Log持久化
2、事务提交前缓存在内存中,不写磁盘。 sync_binlog 决定何时 刷盘
问题:没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
以上是关于(26)redo和undo区别的主要内容,如果未能解决你的问题,请参考以下文章
MySQL的日志:事务日志(redo log和undo log)