Oracle 9 - redo和undo
1.redo
redo 有在线redo日志和归档redo日志, 从Oracle 10g开始还新增加了flashback技术。
每个Oracle数据库至少有2个在线重做日志组,循环写。
只有INSERT, DELETE, UPDATE,MERGE才会生成redo日志,
redo日志用于数据库故障恢复,比如系统崩溃,磁盘介质问题。
2.undo
undo 与redo相反, 修改数据时,会生成undo信息,以便回到更改前的状态。
undo存放在数据库中一组undo变空间和undo段中。
每次用undo恢复数据时,只是逻辑回滚,就是将数据恢复到更改前的状态。 物理变化不会被回滚,比如执行INSERT, 数据库为之创建了新的Extents, 此时回滚的话,这个新创建的extents就不会被消除。
做个试验,通过启用autotrace,查看insert空和insert大量数据后, 再执行SELECT的I/O情况。
3.多次提交和一次提交多个语句。
执行COMMIT的开销
(1) 增加和数据库的通信。
(2) 每次提交都需要将redo写到磁盘,导致等待I/O, 只要是log file sync。
再执行COMMIT之前,大多数工作都已经被完成, 比如
(1) 已经在SGA中生成undo块
(2) 已经在SGA中生成了已修改数据块
(3) 已经在SGA中生成了前2项的redo
(4) 取决于#1,2,3数据量大小,有些可能已经被输出到磁盘, LGWR一直在后台不停的工作。
(5) 已经得到全部锁
所以提交的时候,做的事情就下面几件
(1) 生成一个SCN
(2) 将余下的redo缓存输出到磁盘,并把SCN记录到其中. 到这里事物就已经提交,再v$transaction中已经查不到该transaction
(3) 释放锁,块清除。
从上面可以看出COMMIT的开销并不大。但是大量的频繁的提交小transaction,也可能带来长时间的lgwr I/O等待。
执行Rollback操作时,要撤销已做的修改。从undo段读回数据。
后续内容
分析redo, 分析undo
Oracle 9 - redo和undo的更多相关文章
- 【转】ORACLE的REDO与UNDO
一.什么是redo?redo:oracle在在线或者归档重做日志文件中的记录的信息,外以出现失败时可以利用这些数据来"重放"事务.每个oracle数据都至少有二个在线重做日志组,每 ...
- 【Oracle】redo与undo
一 .redo(重做信息) 是Oracle在线(或归档)重做日志文件中记录的信息,万一出现失败时可以利用这些数据来“重放”(或重做)事务.Oracle中记录这些信息的文件叫做redo log file ...
- Oracle redo与undo
Undo and redo Oracle最重要的两部分数据,undo 与redo,redo(重做信息)是oracle在线(或归档)重做日志文件中记录的信息,可以利用redo重放事务信息,undo(撤销 ...
- Oracle redo与undo 第一弹
一. 什么是redo(用于前滚数据) redo也就是重做日志文件(redo log file),Oracle维护着两类重做日志文件:在线(online)重做日志文件和归档(archived)重做日 ...
- 【知识点整理】Oracle中NOLOGGING、APPEND、ARCHIVE和PARALLEL下,REDO、UNDO和执行速度的比较
[知识点整理]Oracle中NOLOGGING.APPEND.ARCHIVE和PARALLEL下,REDO.UNDO和执行速度的比较 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 ...
- Oracle redo与undo浅析
http://liwenshui322.iteye.com/blog/1488949 一. 什么是redo(用于前滚数据) redo也就是重做日志文件(redo log file),Oracle维护着 ...
- 09 redo and undo
本章提要-----------------------------------------------redo, undo 定义redo, undo 如何工作如何访问 redo, undo提交和回滚- ...
- Current online Redo 和 Undo 损坏的处理方法
转自:http://blog.csdn.net/tianlesoftware/article/details/6261475 Oracle 不同故障的恢复方案 http://blog.csdn.net ...
- 如何理解redo和undo
redo和undo的区别 redo--> undo-->datafileinsert一条记录时, 表跟undo的信息都会放进 redo 中, 在commit 或之前, redo 的信 ...
随机推荐
- 【风马一族_Python】 实施kNN算法
一.在PyCharm 5.0.4(编写python程序的IDE) 编写kNN.py文件的代码 -------------------------- 1. kNN.py 运算符模块 --------- ...
- zedboard搭建交叉编译环境
参考:http://blog.csdn.net/xzyiverson/article/details/11264417 我安装的LINUX12.04LTS 双系统 下载好交叉编译软件xilinx-20 ...
- BootStrap简介及应用要点
BootStrap简介 BootStrap是基于HTML.CSS和JavaScript的框架,使你只需要写简单的代码就可以很快的搭建一个还不错的前端框架,他是后端程序员的福音,使他们只需要专注业务逻辑 ...
- 如何设置SecureCRT通过代理连接SSH[转]
http://blog.didu.me/article/84 公司限制了连接外网的端口和IP,只能通过proxy 连接.刚配置了一下 secureCRT 连接外网,貌似速度还是不错,写出来共享下. 如 ...
- JAVA多线程学习--哲学家就餐问题
哲学家就餐问题是1965年由Dijkstra提出的一种线程同步的问题. 问题描述:一圆桌前坐着5位哲学家,两个人中间有一只筷子,桌子中央有面条.哲学家思考问题,当饿了的时候拿起左右两只筷子吃饭,必须拿 ...
- [JS进阶] 编写可维护性代码 (1)
今天的web应用大至成千上万行的javascript代码,执行各种复杂的过程,这种演化让我们开发者必须得对可维护性有一定的认识!编写可维护性代码很重要,很多情况下我们是以他人的工作成果为基础,确保代码 ...
- 如何去掉html中的超链接
$a= preg_replace("/<a[^>]+>/", "", $a); $a= preg_replace("/<\/a ...
- DirectoryEntry配置IIS出现ADSI Error:未知错误(0x80005000)
目录 问题案例 原因分析 解决问题 总结 问题案例 DirectoryEntry配置IIS,在IIS6.0下运转正常,但IIS7.0下运转会出错: System.DirectoryServices.D ...
- Rac & DG
Rac环境: RAC版本异同:[10R2,11R1(和10类似)],11R2,12c: 目录: 10.2的ASM需要单独的目录(oracle home):rdbms home,asm home, cr ...
- iTween基础之Scale(缩放大小)
一.基础介绍:二.基础属性 原文地址:http://blog.csdn.net/dingkun520wy/article/details/50684392 一.基础介绍 ScaleTo:改变游戏对象的 ...