暂无图片
暂无图片
1
暂无图片
暂无图片
1
暂无图片

Oracle笔记---Redo和Undo解析

原创 Seven 云和恩墨 2022-01-07
1679


最近的工作内容涉及到undo,故将相关知识重新复习一遍
oracle区别于其他关系型数据库的一个特点是:回滚

重做日志–REDO

什么是重做?

重做日志包含所有数据产生的历史改变记录

重做日志文件通常用于

– 恢复(实例恢复和介质恢复)

–日志挖掘

– 流

数据库产生的每个改动,都会产生重做日志:

  • 写入数据块缓冲之前,先写入重做日志
  • 写入数据文件之前,先写入日志文件

当提交后,日志缓冲被刷入重做日志文件里

​​​​1.png

先写第一个,第一个写满些第二个,第二个写满写第三个,第三个写满写第一个,如果当第一个上的重做日志对应的数据块没有被写到磁盘上,会报错,每次切换都会归档

2.png

当redo01a损坏,redo01b可以继续工作,通过在一个组里增加多个日志文件来达到数据容错的目的。

redo和归档

3.png
redo的内容—改变向量

redo里面放的不是sql语句,而是改变向量

原因:sql语句的执行需要解析,当需要恢复时,数据库宕掉了,无法进行解析,只是将数据块拷贝到应在的位置上

恢复是一个物理的过程,只是数据块的覆盖

4.png

创建两张表,x字段为不同大小

5.png

打开两个窗口,登陆sqlplus,获取当前会话的SID
6.png
7.png
查看两个会话的redo值(一般值相同)
8.png
在两个会话中,分别向两张表插入数据
9.png
10.png
再次查看redo大小
11.png

产生redo并不是与插入的数据大小有关,而是由改变的数据块的大小决定的

改变向量产生的redo内容,既不是sql语句,也不是sql语句里改变值的大小,而是数据块的改变大小

undo 的redo

会产生两种redo,数据块产生的redo和undo产生的redo
12.png

UNDO

作用:

a.数据的回滚

b.一致性读:

当九点发出查询的时候,九点五分有用户修改数据块,数据从3变为4,而查询出来的结果还是3,数据库为了保证一致性读,会从回滚段中读取到3

c.表的闪回(事务,查询的闪回)

d.失败会话的恢复

undo回滚后,数据库只是逻辑地恢复到执行语句或事物之前的样子,比如一个插入操作,新分配了一些数据块。后来事务失败,插入操作全部回滚,新分配的一些数据块还是存在的,数据库会有很多并发事物也在修改同一个数据块,如果回滚回收这些数据块,则会撤销其他事物的操作。

如果一张表数据量很少,select * from需要的时间比较多,则可能这张表经常进行增删操作,原来分配的数据块依然存在,如果插入了1000w数据再删除,全表扫描依然会扫描1000w数据所占用的数据块。

查看undo相关参数:
13.png

undo里数据保留的时间是900s,自动创建回滚段,900s内可以闪回

undo表空间对应的数据文件:
14.png

回滚信息放在回滚段上,回滚段放在回滚段表空间上

一条sql Redo和Undo产生过程:

a.读取数据先去内存上找,内存上找不到去磁盘上找,读到内存上的数据块缓冲区
15.png

b.找一个回滚段数据块,将回滚段数据块放到内存里
16.png

c. 将5写到回滚段上(在修改前要把之前的放到回滚段数据块上)
17.png

d.因为修改了回滚段的数据块,产生了redo(回滚段产生的redo) 
18.png

e. 将原始数据块从5改为10
19.png

f. 产生了redo
20.png

最后修改时间:2022-01-07 22:11:12
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

墨天轮福利君
暂无图片
3年前
评论
暂无图片 0
您好,您的文章已入选合格奖,10墨值奖励已经到账请查收! ❤️我们还会实时派发您的流量收益。
3年前
暂无图片 点赞
评论