Oracle 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的根本原因) ROLLBACKROLLBACK和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自动完成的。如果在数据库运行过程中出线 历程失败,那么当启动OracleServer时,后台进程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表空间上不能建立任何数据对象。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

时间: 2024-09-28 08:26:24

Oracle Undo Redo简介的相关文章

Oracle Undo Redo的使用心得

什么是REDO REDO记录transaction logs,分为online和archived.以恢复为目的. 比如,机器停电,那么在重起之后需要online redo logs去恢复系统到失败点. 比如,磁盘坏了,需要用archived redo logs和online redo logs区恢复数据. 比如,truncate一个表或其他的操作,想恢复到之前的状态,同样也需要. 什么是UNDO REDO是为了重新实现你的操作,而UNDO相反,是为了撤销你做的操作,比如你得一个TRANSACTI

C#中使用单个对象的方法实现Undo/Redo

简介 我们如何在不同的场景下使用这些方法来实现Undo/Redo.这些方法是使用单个对象表示变化,命令模 式和备忘录模式. 正如我们所知,Undo/Redo没有通用的解决方案,而Undo/Redo在每个应用程序中非常具体.处于这个 原因,在该系列文章的开始部分,将讨论如何使用该方法建模任意的应用程序,然后展示一个简单应用程 序的实现. 关于Undo/Redo实现的基本思想 正如我们所知,应用程序在每次操作后改变其状态.当操作应用程序时,它的状态会发生改变.所以 ,若有人想要做撤销,他不得不回到先

Oracle Online Redo Log能否放在Flash闪存卡上?

Flash 闪存卡的性能远超SAS 盘,所以在数据库中使用广泛. 但是online redo log 是否应该存放在闪存卡上一直是有争议的话题.今天由DBA+社群合肥发起人戴明明来谈一谈他通过理论和实际的实验去测试这个问题.   专家简介     戴明明 DBA+社群合肥发起人   Oracle ACE Associate,中国 ORACLE 用户组(ACOUG) 核心成员,中国浙江应用中间件与数据库用户组成员. 超过7年的DBA经验,在Oracle 高可用性方面有一定的经验积累,擅长Oracl

cegui layouteditor UI编辑器 如何增加 undo redo 功能

问题描述 cegui layouteditor UI编辑器 如何增加 undo redo 功能 2C cegui layouteditor UI编辑器 如何增加 undo redo 功能, 请稍微详细些, 谢谢 解决方案 用一个堆栈,每次输入都把之前的值存进去.撤销就从堆栈中恢复

Undo/Redo for Qt Tree Model

Undo/Redo for Qt Tree Model eryar@163.com Abstract. Qt contains a set of item view classes that use a model/view architecture to manage the relationship between data and the way it is presented to the user. The separation of functionality introduced

MySQL日志Undo&Redo

00 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制(简称:MVCC). - 事务的原子性(Atomicity)  事务中的所有操作,要么全部完成,要么不做任何操作,不能只做部分操作.如果在执行的过程中发生  了错误,要回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过. - 原理  Undo Log的原理很简单,为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个地方

WPF/Silverlight Undo/Redo框架

应用中Undo/Redo是比较常用的功能,如果每个应用做一个比较麻烦,可以参考如下的框架:   大名鼎鼎的 infragistics 提供的框架: http://blogs.infragistics.com/blogs/ambrose_little/archive/2012/01/26/infragistics-undo-redo-framework-ctp.aspx http://www.infoq.com/news/2012/01/undo-redo-silverlight-wpf    c

oracle undo 解析

声明一下:关于oracle的文章基于boobooke小布老师视频,在我学习的过程中,每有体会拿来分享,虽然从理解到整理分享很耗时,但我想这样的学习是扎实的.     Undo是干嘛用的?                                           在介绍undo之前先说一下另外一个东西 transaction ,翻译成交易或事务.我们在进行一个事务的过程中需要申请许多资源,一个复杂的事务也需要很多步来完成.那么一个复杂的事务是只有两个结果,要么成功,要么失败(相当于从来没

Oracle数据库Redo故障的恢复

一.丢失inactive日志文件组的恢复: 由于inactive日志文件组表示已经完成了检查点(dirty数据已经被写入数据文件).数据库本身不会发生数据库丢失,如果在这个时候相应的redo丢失/损坏,可以通过clear重建日志文件组恢复. 通过命令: alter database clear logfile group n 如果数据库模式是archived的,则需要强制清除 alter database clear unarchived logfile group n 二.丢失active或c