返回顶部
首页 > 资讯 > 数据库 >undo与redo的区别
  • 326
分享到

undo与redo的区别

2024-04-02 19:04:59 326人浏览 安东尼
摘要

undo:撤销,也就是取消之前的操作。 redo:重做,重新执行一遍之前的操作。什么是REDO  REDO记录transaction logs,分为online和arcHived。以恢复为目的。 

undo:撤销,也就是取消之前的操作。

 redo:重做,重新执行一遍之前的操作。

什么是REDO

  REDO记录transaction logs,分为online和arcHived。以恢复为目的。

  比如,机器停电,那么在重起之后需要online redo logs去恢复系统到失败点。

  比如,磁盘坏了,需要用archived redo logs和online redo logs去恢复数据。

  比如,truncate一个表或其他的操作,想恢复到之前的状态,同样也需要。

什么是UNDO

  REDO 是为了重新实现你的操作,而UNDO相反,是为了撤销你做的操作,比如你得一个TRANSACTION执行失败了或你自己后悔了,


则需要用 ROLLBACK命令回退到操作之前。回滚是在逻辑层面实现而不是物理层面,因为在一个多用户系统中,数据结构,blocks等都


在时时变化,比如我们 INSERT一个数据,表的空间不够,扩展了一个新的EXTENT,我们的数据保存在这新的EXTENT里,其它用户随后


也在这EXTENT里插入了数据,而此时我想ROLLBACK,那么显然物理上讲这EXTENT撤销是不可能的,因为这么做会影响其他用户的操作


。所以,ROLLBACK是逻辑上回滚,比如对INSERT来说,那么ROLLBACK就是DELETE了。




一.undo中数据的特点:

1。是数据修改前的备份,主要是保证用户的读一致性

2. 在事务修改数据时产生

3。至少保存到事务结束


二。undo数据的作用:

1.回滚(rollback)操作

2.实现读一致性与闪回查询

3.从失败的事务中还原数据

4. 非正常停机后的实例恢复


三.undo回滚段的特点:

1.回滚段是由实例自动创建用于支持事务运行的专用段,同样是区和块组成,回滚顶会按实际需要自动进行增长或收缩,是一段可以


给指定事务循环使用的存储缓冲区。

2.每个事务只会使用一个回滚段,一个回滚段在同一时刻可能会服务于多个事务

3.当一个事务开始的时候,会指定一个回滚段,在事务进行的过程中,当数据被修改时,原始的数据会被复制到回滚段。

4。在回滚段中,事务会不断填充盘区,直到事务结束或所有的空间被用完,如果当前的盘区不够用,事务会在段中请求扩展下一个盘


区,如果所有已分配的盘区都被用完,事务会覆盖最初的盘区或者在回滚段允许的情况下扩展新的盘区来使用.

5。回滚段存在于undo表空间中,在数据库中可以存在多个undo表空间,但同一时刻只能使用一个undo表空间。



四.回滚段中的数据类型:

回滚段中的数据主要分为以下三种:

1.Uncommitted undo infORMation; 未提交的回滚数据,该数据所关联的事务并未提交,用于实现读一致性,所以该数据不能被其它


事务的数据所覆盖

2.Committed undo information;已经提交但未过期的回滚数据,该数据关联的事务已经提交,但是仍受到undo retention参数保持时


间的影响

3.Expired undo information;事务已经提交,而且数据保存时间已经超过undo retention参数指定的时间,属于已经过期的数据

当回滚段满了后,会优先覆盖Expired undo information,当过期数据空间用完后,会再覆盖Committed undo information的区域,


这时undo retention参数所规定的保持时间会被破坏,Uncommitted undo information的数据是不允许覆盖的,如果要求提交的数据


在undo retention参数规定的时间内不会被覆盖,可以在undo表空间上指定RETENTION GUARANTEE,语法如下:

ALTER TABLESPACE UNDOTBS1 RETENTION GUARANTEE;



五。undo数据与redo数据的区别:



redo--> undo-->datafile

insert一条记录时, 表跟undo的信息都会放进 redo 中, 在commit 或之前, redo 的信息会放进硬盘上. 故障时, redo 便可恢复那些


已经commit 了的数据.


redo->每次操作都先记录到redo日志中,当出现实例故障(像断电),导致数据未能更新到数据文件,则数据库重启时须redo,重新


把数据更新到数据文件

undo->记录更改前的一份copy,但你系统rollback时,把这份copy重新覆盖到原来的数据


redo->记录所有操作,用于恢复(redo records all the database transaction used for recovery)

undo->记录所有的前印象,用于回滚(undo is used to store uncommited data infor used for rollback)


redo->已递交的事务,实例恢复时要写到数据文件去的

undo->未递交的事务.


redo的原因是:每次commit时,将数据的修改立即写到online redo中,但是并不一定同时将该数据的修改写到数据文件中。因为该数


据已经提交,但是只存在联机日志文件中,所以在恢复时需要将数据从联机日志文件中找出来,重新应用一下,使已经更改数据在数


据文件中也改过来!


undo的原因是:在oracle正常运行时,为了提高效率,假如用户还没有commit,但是空闲内存不多时,会由DBWR进程将脏块写入到数据


文件中,以便腾出宝贵的内存供其它进程使用。这就是需要UNDO的原因。因为还没有发出commit语句,但是oracle的dbwr进程已经将


没有提交的数据写到数据文件中去了。


undo 也是datafile, 可能dirty buffer 没有写回到磁盘里面去。

只有先redo apply 成功了,才能保证undo datafile 里面的东西都是正确的,然后才能rollback


做undo的目的是使系统恢复到系统崩溃前(关机前)的状态,再进行redo是保证系统的一致性.

不做undo,系统就不会知道之前的状态,redo就无从谈起



六.与undo有关的相关参数

undo_management = auto 自动的undo表空间管理

undo_tablespace = undotbs1 设置undo表空间的名称,可以存在多个undo表空间,但同时只能使用一个

undo_retention = 900(秒) 设置快照保存的最少时间,设置后在此时间段内仍有可能会被覆盖

ALTER TABLESPACE UNDO_TS RETENTION GUARANTEE; 强制所有快照必须保存 undo_retention所规定的时间。


您可能感兴趣的文档:

--结束END--

本文标题: undo与redo的区别

本文链接: https://lsjlt.com/news/43299.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • undo与redo的区别
    undo:撤销,也就是取消之前的操作。 redo:重做,重新执行一遍之前的操作。什么是REDO  REDO记录transaction logs,分为online和archived。以恢复为目的。 ...
    99+
    2024-04-02
  • UNDO与REDO的区别是什么
    这篇文章主要讲解了“UNDO与REDO的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“UNDO与REDO的区别是什么”吧!UNDO 为了解决一致性...
    99+
    2024-04-02
  • redo和undo的区别
    redo--> undo-->datafile insert一条记录时, 表跟undo的信息都会放进 redo 中, 在commit 或之前, redo 的信息会放进硬盘上. 故障时, re...
    99+
    2024-04-02
  • Mysql中undo、redo与binlog的区别浅析
    目录前言【undo log】 【redo log】 【binlog】 总结前言 MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制...
    99+
    2024-04-02
  • oracle中undo和redo有什么区别
    这期内容当中小编将会给大家带来有关oracle中undo和redo有什么区别,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、undo中数据的特点:1.是数据修改前的备份...
    99+
    2024-04-02
  • 理解ORACLE REDO与UNDO
    redo--> undo-->datafileinsert一条记录时, 表跟undo的信息都会放进 redo 中, 在commit 或之前, redo 的信息会放进硬盘上. 故障时, redo ...
    99+
    2024-04-02
  • MySQL中redo log与binlog的区别有哪些
    这篇文章主要介绍“MySQL中redo log与binlog的区别有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL中redo log与binlog的区别有哪些”文章...
    99+
    2023-06-29
  • SQLServer的检查点、redo和undo
    SQLServer的检查点、redo和undo 检查点与恢复效率的关系 检查点将脏数据页从当前数据库的缓冲区高速缓存刷新到磁盘上。 这最大限度地减少了恢复时必须重做(Redo)的修改量。 为什么在...
    99+
    2024-04-02
  • 一文弄懂MySQL中redo log与binlog的区别
    目录前言1. 什么是redo log?1.1 redo日志文件名1.2 影响redo log参数1.3 redo log大小怎么设置?2. 什么是binlog2.1 binlog文件...
    99+
    2024-04-02
  • MySQL中的redo log和undo log日志详解
    MySQL日志系统中最重要的日志为重做日志redo log和归档日志bin log,后者为MySQL Server层的日志,前者为InnoDB存储引擎层的日志。 1 重做日志redo log 1.1 什么是redo ...
    99+
    2022-05-13
    MySQL redo log mysql undo log
  • MySQL的binlog、redo log和undo log怎么使用
    这篇文章主要介绍“MySQL的binlog、redo log和undo log怎么使用”,在日常操作中,相信很多人在MySQL的binlog、redo log和undo log怎么使用问题上存在疑惑,小编查...
    99+
    2024-04-02
  • 详解MySQL 重做日志(redo log)与回滚日志(undo logo)
    前言: 前面文章讲述了 MySQL 系统中常见的几种日志,其实还有事务相关日志 redo log 和 undo log 没有介绍。相对于其他几种日志而言, redo log 和 undo log 是更加神秘,难以观测...
    99+
    2022-05-11
    MySQL 重做日志 MySQL 回滚日志 MySQL redo和undo
  • MySQL 撤销日志与重做日志(Undo Log与Redo Log)相关总结
    Undo Log 数据库事务开始之前,会将要修改的记录存放到 Undo 日志里,当事务回滚时或者数据库崩溃时,可以利用 Undo 日志,撤销未提交事务对数据库产生的影响。 Undo Log产生和销毁 Undo L...
    99+
    2022-05-20
    MySQL 撤销日志Undo Log MySQL 重做日志Redo Log
  • mysql中redo log和binlog的区别有哪些
    这篇文章给大家分享的是有关mysql中redo log和binlog的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。想跟大家聊聊关于 mysql 中的两个小的知识点:redo log 和 bi...
    99+
    2023-06-29
  • MySQL中的redo log和undo log日志有什么用
    这篇文章主要介绍“MySQL中的redo log和undo log日志有什么用”,在日常操作中,相信很多人在MySQL中的redo log和undo log日志有什么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-20
  • 基于Redo Log和Undo Log的MySQL崩溃恢复解析
    目录MySQL崩溃恢复流程 1、黑盒下的更新数据流程 2、Redo Log & Undo Log3、实现日志后的更新流程3、流程中仍然存在的问题4、基于2PC的一致性保障5、...
    99+
    2024-04-02
  • MySQL事务日志(redo log和undo log)的详细分析
    目录前言1.redo log1.1 redo log和二进制日志的区别1.2 redo log的基本概念1.3 日志块(log block)1.4 log group和redo lo...
    99+
    2024-04-02
  • MySQL日志之redo log和binlog的区别是什么
    这篇文章主要介绍了MySQL日志之redo log和binlog的区别是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。redo log和...
    99+
    2024-04-02
  • MySQL日志之redo log和undo log的知识点有哪些
    本篇内容介绍了“MySQL日志之redo log和undo log的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小...
    99+
    2024-04-02
  • jsp与js与jquery的区别
    jsp与js与jquery的区别:1、js是javascript文件的文件后缀。2、jquery 是一个函数库,是基于javascript的。3、jsp是jsp网页文件的后缀。js是javascript文件的文件后缀,其实就像文本文档a.t...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作