首先看一下undo与redo的字面意思:

  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了。
  COMMIT 以前,常想当然地认为,一个大的TRANSACTION(比如大批量地INSERT数据)的COMMIT会花费时间比短的TRANSACTION长。而事实上是没有什么区别的,
  因为ORACLE在COMMIT之前已经把该写的东西写到DISK中了,
  我们COMMIT只是
  1,产生一个SCN给我们TRANSACTION,SCN简单理解就是给TRANSACTION排队,以便恢复和保持一致性。
  2,REDO写REDO到DISK中(LGWR,这就是log file sync),记录SCN在ONLINE REDO LOG,当这一步发生时,我们可以说事实上已经提交了,这个TRANSACTION已经结束(在V$TRANSACTION里消失了)
  3,SESSION所拥有的LOCK(V$LOCK)被释放。
  4,Block Cleanout(这个问题是产生ORA-01555: snapshot too old的根本原因) ROLLBACK ROLLBACK和COMMIT正好相反,ROLLBACK的时间和TRANSACTION的大小有直接关系。因为ROLLBACK必须物理上恢复数据。 COMMIT之所以快,是因为ORACLE在COMMIT之前已经作了很多工作(产生UNDO,修改BLOCK,REDO,LATCH分配), ROLLBACK慢也是基于相同的原因。
  1. UNDO表空间用于存放UNDO数据。当执行DML操作时,Oracle会将这些操作的旧数据写入UNDO段。管理UNDO数据不仅可以使用回滚段,还可以使用UNDO表空间。
  2. UNDO数据的作用:当用户执行DML操作修改数据时,UNDO数据被存放在UNDO段,而新数据则被存放到数据段中,如果事务操作存在问题,就需要回退事务,以取消事物变化。
  例如:执行完UPDATE emp SET sal=1000 WHERE empno=7788后,发现应该修改雇员7963的工资,而不是7788.此时应该执行ROLLBACK语句。
  3.读一致性
  用户检索数据时,ORACLE总是使用户只能看到被提交过的数据,这是由Oracle自动提供的。当用户修改数据,但是没有提交时,另外一个用户使用select语句查找该值时,该值就是从undo表空间中取得的。
  4.事务恢复
  事务恢复是例程恢复的一部分,它是由Oracle Server自动完成的。如果在数据库运行过程中出线例程失败,那么当启动Oracle Server时,后台进程SMON会自动执行例程恢复。执行例程恢复时,Oracle会重做所有未应用的记录。然后打开数据库,回退未提交事务。
  5.倒叙查询
  倒叙查询用于取得某一特定时间点的数据库数据。
  6.UNDO_MANAGEMENT
  使用初始化参数用于指定UNDO数据的管理方式。如果使用自动管理模式,必须设置该参数为AUTO,此时采用UNDO表空间管理UNDO数据;如果使用手工管理模式,必须设置该值为MANUAl,此时采用回滚段管理UNDO数据。
  7.UNDO_TABLESPACE
  用于指定例程所要使用的UNDO表空间。使用自动UNDO管理模式时,通过配置该参数可以指定例程所要使用的UNDO表空间。
  使用RAC结构时,必须为每个例程配置一个独立的UNDO表空间。
  8.UNDO_RETENTION
  该参数用于控制UNDO数据的最大保留时间,其默认值为900秒,该值时倒序查询可以查看到的最早时间点。
  9.UNDO表空间上不能建立任何数据对象。

一.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数据的区别:
1.undo记录数据修改之前的操作,redo记录磁盘数据将要进行的操作.
2.undo用于数据的回滚操作,和实现一致性读,redo用于前滚数据库操作
3.undo存储在回滚段里,redo存储在重做日志文件里
4.undo用于在多用户并发的系统里保证一致性读,redo用于防止数据丢失

六.与undo有关的相关参数
undo_management = auto 自动的undo表空间管理
undo_tablespace = undotbs1 设置undo表空间的名称,可以存在多个undo表空间,但同时只能使用一个
undo_retention = 900(秒) 设置快照保存的最少时间,设置后在此时间段内仍有可能会被覆盖
ALTER TABLESPACE UNDO_TS RETENTION GUARANTEE; 强制所有快照必须保存 undo_retention所规定的时间。

Oracle redo与undo 第二弹的更多相关文章

  1. Oracle redo与undo 第一弹

      一. 什么是redo(用于前滚数据) redo也就是重做日志文件(redo log file),Oracle维护着两类重做日志文件:在线(online)重做日志文件和归档(archived)重做日 ...

  2. Oracle redo与undo

    Undo and redo Oracle最重要的两部分数据,undo 与redo,redo(重做信息)是oracle在线(或归档)重做日志文件中记录的信息,可以利用redo重放事务信息,undo(撤销 ...

  3. Oracle redo与undo浅析

    http://liwenshui322.iteye.com/blog/1488949 一. 什么是redo(用于前滚数据) redo也就是重做日志文件(redo log file),Oracle维护着 ...

  4. 【转】ORACLE的REDO与UNDO

    一.什么是redo?redo:oracle在在线或者归档重做日志文件中的记录的信息,外以出现失败时可以利用这些数据来"重放"事务.每个oracle数据都至少有二个在线重做日志组,每 ...

  5. Oracle redo/undo 原理理解

    一. 什么是redo(用于重做数据) redo也就是重做日志文件(redo log file),Oracle维护着两类重做日志文件:在线(online)重做日志文件和归档(archived)重做日志文 ...

  6. Oracle redo undo

    通常对undo有一个误解,认为undo用于数据库物理地恢复到执行语句或事务之前的样子,但实际上并非如此.数据库只是逻辑地恢复到原来的样子,所有修改都被逻辑地取消,但是数据结构以及数据库块本身在回滚后可 ...

  7. Oracle 9 - redo和undo

    1.redo redo 有在线redo日志和归档redo日志, 从Oracle 10g开始还新增加了flashback技术. 每个Oracle数据库至少有2个在线重做日志组,循环写. 只有INSERT ...

  8. [Oracle] Redo&Undo梳理

    Oracle Redo&undo Oracle中的redo和undo是关键技术的核心, 诸如实例恢复, 介质恢复, DataGuard, 闪回机制等都是给予redo和undo的, 所以很有必要 ...

  9. 【Oracle】redo与undo

    一 .redo(重做信息) 是Oracle在线(或归档)重做日志文件中记录的信息,万一出现失败时可以利用这些数据来“重放”(或重做)事务.Oracle中记录这些信息的文件叫做redo log file ...

随机推荐

  1. Python3.5 控制台日志输出,区分标准输出与错误输出

    import logging import sys class ConsoleHandler(logging.Handler): terminator = '\n' def __init__(self ...

  2. Java中的Enum(枚举)用法介绍

    1. 关于Java Enum:学过C/C++等语言的人,应该都对Enum类型略知一二.Enum一般用来表示一组相同类型的常量.如性别.日期.月份.颜色等.对这些属性用常量的好处是显而易见的,不仅可以保 ...

  3. vulhub-php/php_inclusion_getshell

    注:本地测试php文件包含+phpinfo泄露导致getshell,此漏洞与php版本无关 使用vulhub环境进行复现: 项目地址:https://github.com/vulhub/vulhub/ ...

  4. MS Chart 条状图【转】

    private void Form1_Load(object sender, EventArgs e) {            string sql1 = "select  类别,coun ...

  5. ubuntu配置硬盘开机自动挂载

    1.创建/media/fly文件夹 sudo mkdir /home/fly    #根据个人喜好命名 2.获取要自动挂载的分区的UUID和分区类型TYPE sudo blkid 出现如下结果:   ...

  6. ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第十二天(非原创)

    文章大纲 一.课程介绍二.Ngnix基础知识学习三.Ngnix在淘淘商城中使用四.参考资料下载五.参考文章 一.课程介绍 一共14天课程(1)第一天:电商行业的背景.淘淘商城的介绍.搭建项目工程.Sv ...

  7. vue3.0学习笔记(二)

    一.选择合适的ide 推荐使用vs code编辑器,界面清晰.使用方便,控制台功能很好用.webstorm也可以,看个人喜好. 二.ui框架选择 目前,pc端一般是选择element ui(饿了么), ...

  8. gitk更改主题设置打不开

    ➜ project git:(master) gitk Error in startup script: unknown color name "lime" (processing ...

  9. NOIP2013Day1T3 表示只能过一个点

    •A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的 ...

  10. This is your path and you will pursue it with excellence.

    This is your path and you will pursue it with excellence.自己选的路就要走出精彩.