定义
- 对于DML来说,只要修改了数据块,Oracle数据库就会将修改前的数据保留下来,保存在undo segment里,而undo segment则保存在undo表空间。
- 对于undo的管理,有手工undo和自动undo,11g默认使用自动undo管理
undo作用
- 当Oracle在提动一致读的过程中,会跟进ITL槽里记录的undo块的底座,而搜索使用相关联的undo块,只要使用undo块的事务提交或者回滚,则这些undo块就不再被事务所需要,也就是说其中包含旧的数据可以被覆盖,这样就会发生在查找改变前的旧值过程中,找不到足够旧的值,而爆出ORA-1555的错误消息,为此,oracle为undo管理提供了另一个参数:undo_retention,改参数以秒为单位,表示当事务提交或者回滚以后,改事务所使用的undo块里的数据需要保留多长时间,当保留时间超过undo_retention所指定的时间以后,该undo块才能够被其他事务覆盖。
- 当没有undo块可以使用,如果设置了rentention garentee,则数据库报错,否则把之前的数据覆盖掉。不管retention参数
1 | --查看undo表空间 |
v$undostat
- 每10分钟更新一次,记录了undo表空间的使用情况