技术文章一些收藏

(26)redo和undo区别

2021-01-18  本文已影响0人  hedgehog1112

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

上一篇 下一篇

猜你喜欢

热点阅读