关于undo和redo日志的区别

一、undo和redo日志的区别

undo:撤销,也就是取消之前的操作
redo:重做,重新执行一遍之前的操作

二、什么是redo

redo记录transaction logs,分为online和archived,以恢复为目的。
比如,机器停电,那么在重启之后需要online redo logs去恢复系统到失败点。
比如,磁盘坏了,需要用archived redo logs 和 online redo logs 去恢复数据。
比如,truncate一个表或其他的操作,想恢复到之前的状态,同样X`也需要。

三、什么是undo

undo是为了撤销你做的操作,比如你执行了一个transaction执行失败了或者你自己后悔了,撤销此操作。通过rollback命令回退到操作之前的状态,回滚是在逻辑层面实现而不是物理层面,因为在一个多用户系统中,数据结果,blocks等都在时刻变化,比如我们insert一条数据,表的空间不够,扩展了一个新的extent,我们的数据保存在这个新的extent里面,其他用户随后也在这个extent里插入了数据,而此时我想rollback,那么显然物理上讲extent撤销是不可能的,因为这样操作会影响其他用户的操作。所以,rollback是逻辑上的回滚。

四、undo中数据的特点

1)数据修改前的备份,主要是保证用户的读一致性。
2)在事务修改数据时产生。
3)至少保存到事务结束
五、undo数据的作用
1)回滚(rolllback)操作
2)实现读一致性与闪回查询
3)从失败的事物中还原数据
4)非正常停机后的实例恢复

六、undo回滚段的特点

①回滚段是由实例自动创建用于支持事务运行的专用段,同样的区和块组成,回滚顶会按照实际需要自动进行增长或收缩,是一段可以给指定事务循环使用的存储缓冲区。
②每个事物只会使用一个回滚段,一个回滚段在同一时刻可能会服务于多个事务。
③当一个事务开始的时候,会制定一个回滚段,在事务进行的过程中,当数据被修改时,原始的数据会被复制到回滚段。
④在回滚段中,事务会不断填充盘区,直到事务结束或所有的空间被用完,如果当前的盘区不够用,事务会在段中请求扩展下一个盘区,如果所有已分配的盘区都被用完,事务会覆盖最初的盘区或者在回滚段允许的情况下扩展新的盘区来使用。
⑤回滚段存在于undo表空间中,在数据库中可以存在多个undo表空间,但同一时刻只能使用一个undo表空间。

七、回滚段中的数据类型

未提交的回滚数据、已经提交但未过期的回滚数据、事务已经提交并过期的数据
1)未提交的回滚数据(uncommitted undo information):该数据所关联的事物并未提交,用于实现读一致性,所以该数据不能被其他事务的数据所覆盖
2)已经提交但未过期的回滚数据(committed undo information):已经提交但未过期的回滚数据,该数据关联的事物已经提交,但是扔收到undo retention参数的保持时间的影响。
3)事物已经提交并过期(expired undo information):事务已经提交,而且数据保存时间已经超过undo retention参数指定的时间,属于已经过期的数据,当回滚段满了之后,会优先覆盖"事务已经提交并过期的数据".

  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值