oracle undoautotune,温故知新 - UNDO,UNDO_RETENTION 及 _undo_autotune

Undo一个重要用途就是在对数据进行修改时候,能将数据块中被修改前的数据(注意

不是数据块,一般被称为before image)保存到回滚段中。回滚时就可以取出还原。

UNDO还有其他用途,如一致性读、闪回功能(Flashback Database及flashback drop

[recyclebin]除外)等。

-- UNDO的几种状态:

active - 活动状态的回滚段,不能够被覆盖或者是离线(offline)

inactive - 当事务提交或者是回滚之后,对应的回滚区则标记为非活动(Inactive)状态

处于非活动状态的回滚区不再为数据回滚或是数据库恢复等功能所用,但是UNDO的其它

如一致性读和闪回等功能却还是有可能用到这些回滚段。因此处于Inactive的回滚区也

并不意味着就可以马上被覆盖,这个需要取决于UNDO的RETENTION的设置(undo_retention)。

--UNDDO_RETENTION

在事务提交或回滚之后,因为flashback或一致读的需求,还需要将对应的UNDO数据

保存在UNDO表空间中一段时间,这个时间就是由undo_retention来设置的。

根据UNDDO_RETENTION可以继续将UNDO的inactive状态划分为EXPIRED,UNEXPIRED两类,

undo中超过undo_retention时间之外的inactive undo回滚区称为expired, 还处于

unod_retention时间之内的inactive undo回滚区称为unexpired .

--RETENTION GUARANTEE

UNDO_RETENTION不是说必须达到这个时间后才能被覆盖,而只是一个期望值,比如UNDO

表空间文件设置为非自动扩展,当一个大事务需要将undo中未使用的区域及过期的undo

区域都使用完了,而UNDO空间不能自动扩展,这时保证事务顺利运行优先级比较高,UNDO

中没有过期的回滚区也会被覆盖使用(从其中使用时间越早的开始),也就是说retention

设置的时间段内的UNDO非过期数据是没有保证的。10g开始提供参数RETENTION GUARANTEE

设置在tablespace的属性中,那么未过期的UNDO数据就不会再被覆盖掉了。但是设置属性

RETENTION GUARANTEE,UNDO空间不足时很可能造成事务失败,所以一般不会设置。

_UNDO_AUTOTUNE

从10g开始,Oracle提供了UNDO自动优化功能,就是在UNDO表空间非自动增长的情况下,

Oracle会根据UNDO表空间的大小来调整UNDO RETENTION的大小,自动调整RETENTION就是

最大限度的利用当前UNDO表空间的可用空间,尽可能的保留最多的UNDO数据,以最大化的

减少类似ORA-01555 等错误发生。在这种情况下的UNDO RETENTION就基本没有用处了。

默认情况下 _UNDO_AUTOTUNE =TRUE, 开启UNDO自动优化功能。经过优化的UNDO RETENTION

可以在V$UNDOSTAT的  TUNED_UNDORETENTION 中看到, 一般oracle每10分钟写一条unod表

空间使用情况记录到V$UNDOSTAT, 包括 TUNED_UNDORETENTION 。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值