oracle redo查询,Oracle的REDO和UNDO深入分析(转)

一、REDO

Oracle维护着两类重做日志文件:在线(online)重做日志文件和归档(archived)重做日志文件。

在线重做日志用于在出现电源故障(实例终止)时“修正”数据文件,而归档重做日志用于在出现硬盘故障时或者误操作删除数据时,配合数据文件备份“修正”数据文件。

每个

Oracle数据库都至少有两个在线重做日志组,每个组中至少有一个成员(重做日志文件)。这些在线重做日志组以循环方式使用。

可以使用以下语句在一个操作前后查询redo

size,计算差值来得到本次操作生成的重做日志的大小:

select b.value from v$statname a, v$mystat b where

a.statistic# = b.statistic# and a.name = 'redo size';

(对于简单的DML语句,也可以在SQL*PLUS中利用AUTOTRACE来测量)

二、UNDO

对数据执行修改时,数据库会生成undo信息,这样事务或语句由于某种原因失败了,或者用ROLLBACK语句请求回滚,就可以利用这些UNDO信息将数据放回到修改前的样子。UNDO在数据库内部存储在一组特殊的段中,这称为UNDO段(UNDO

segment),或者“回滚段”(rollback segment)。

需要注意,UNDO并不能将数据库物理地恢复到执行语句或事务之前,只是逻辑地恢复,所有修改都被逻辑地取消,但是数据结构以及数据库块本身在回滚后可能会改变。考虑到可能会有并发事务,必须这样。

UNDO也会受到REDO的保护。换句话说,会把UNDO数据当成是表数据或索引数据一样,对UNDO的修改会生成一些REDO,这些REDO将计入日志。

三、如何估计REDO量

需要考虑表数据或索引数据的REDO,加上对UNDO的修改生成的REDO,来估算REDO的生成量。

INSERT生成很少的UNDO,但是生成大量的REDO;DELETE生成很少的REDO,但是生成最多的UNDO;

UPDATE则同时生成大量的REDO和UNDO。

因此可以如下估算:

· 估计你的“事务”大小(你要修改多少数据)。

·

在要修改的数据量基础上再加10%~20%的开销,具体增加多大的开销取决于要修改的行数。修改行越多,增加的开销就越小。

· 对于UPDATE,要把这个估计值加倍。

UPDATE 的估计值加倍只是一个猜测,实际上这取决于你修改了多少数据。之所以加倍,是因为在此假设要取一个X

字节的行,并把它更新(UPDATE)为另一个X

字节的行。如果你取一个小行(数据量较少的行),要把它更新为一个大行(数据量较多的行),就不用对这个值加倍(这更像是一个INSERT)。如果取一个大行,而把它更新为一个小行,也不用对这个值加倍

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值