Oracle笔记---Redo和Undo解析

oracle区别于其他关系型数据库的一个特点是:回滚

重做日志--REDO

 

什么是重做?

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

重做日志文件通常用于

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

   --日志挖掘

   -- 流

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

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

             写入数据文件之前,先写入日志文件

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

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

   

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

redo和归档

redo的内容---改变向量

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

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

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

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

打开两个窗口,登陆sqlplus,获取当前会话的SID

查看两个会话的redo值(一般值相同)

在两个会话中,分别向两张表插入数据

再次查看redo大小

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

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

undo 的redo

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

UNDO

 

作用:

 a.数据的回滚

 b.一致性读:

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

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

d.失败会话的恢复

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

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

查看undo相关参数:

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

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

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

 

一条sql Redo和Undo产生过程:

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

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

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

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

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

f. 产生了redo

参考视频:炼数成金 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值