1、撤销数据
如果数据库已被转换使用撤销段,并且自动进行撤销管理,那么任何现有的回滚段都必须处于脱机模式中,而且不能被设置为联机。根据UNDO_MANAGEMENT参数的不同设置,Oracle数据库要么使用撤销段,要么使用回滚段。
2、撤销表空间
一个数据库可以存在多个撤销表空间,但是在任意给定时刻都只能使用一个撤销表空间。撤销表空间必须被创建为持久的、本地管理的并且能够自动扩展分配空间的表空间。
3、事务与撤销段
在某个事务启动时,Oracle会为其指派一个撤销段。任何一个事务都只能受一个撤销段保护,一个事务生成的撤销数据无法被分配到多个撤销段中。
在某个事务更新表和索引数据块时,回滚该变化所需的信息会被写入指定撤销表空间的数据块。
撤销数据在提交后过期的事实意味着可以采用循环方式使用撤销段。
如果使用原有的、人工管理的回滚段,那么调整的重要环节是控制具体事务分别受哪些回滚段保护。
4、管理撤销
4.1、与撤销相关的错误条件
管理撤销的原则十分简单:首先,应当始终存在允许所有事务继续进行的足够撤销空间;其次,应当始终存在保证查询成功的足够撤销数据。
如果某个事务耗尽了撤销空间,那么这个事务就会由于Oracle错误“ORA-30036 unable to extend segment in undo tablespace(无法扩展撤销表空间内的撤销段)”而失败。
4.2、用于撤销管理与撤销保留保证的参数
下面3个初始化参数可以控制撤销:
- UNDO_MANAGEMENT:默认为manual,就是不会使用撤销段。默认设置是为了实现向后兼容性,最后不要使用默认。建议设置为AUTO,启用使用撤销段的自动撤销管理。参数是静态的。
- UNDO_TABLESPACE:如果使用了“UNDO_MANAGEMENT=AUTO”,就一定要指定该参数。该参数指定了一个作为有效撤销表空间的表空间,并且该表空间必须已被创建为一个撤销表空间,同时其内部的所有撤销段都会被自动联机。
- UNDI_RETENTION:可选,以秒为单位进行设置的参数。指定了保留过期撤销数据的目标位置。如果配置了保证撤销保留,那么该参数就不是可选的。针对撤销的默认模式是:对于事务与查询来说,Oracle更倾向于维护事务。10G版本中存在保证撤销保留的选项,意味着经过UNDO_RETENTION参数所指定的时间之前,撤销数据决不会被重写。
可以用SQL*Plus更改某个表空间的撤销保留保证,但是无法通过EM完成相同的功能。
4.3、调整与监视撤销表空间
撤销表空间应当足够大,算法的话,首先计算在最高工作负荷时生成撤销的速度,然后再乘以耗时最长的查询的时间长度。
4.4、删除与缩小撤销表空间
创建一个撤销表空间时,Oracle会在这个表空间内创建一个撤销段池。