undo

目录·Undo数据
·Undo表空间
·事务与Undo段
·管理Undo



撤销(Undo)数据是反转DML语句结果所需的信息。撤销数据通常被称为“回滚数据”,在过去的Oracle版本中,“回滚数据”和“撤销数据”可以交替使用,但从 9i版本开始,这两个术语有所不同:功能相同,但管理方式不同。只要某个事务修改了数据,那么更新前的原有数据就会被写入一个回滚段或撤销段。回滚段在 11g版本中依然存在,但从9i版本开始,Oracle数据库引入了可供选择的撤销段。Oracle强烈建议所有数据库都应当使用撤销段,回滚段只被保留用于向后兼容。
Undo数据

如果数据库已被转换使用撤销段,并且自动进行撤销管理,那么任何现有的回滚段都必须处于脱机模式中,而且不能被设置为联机。根据 UNDO_MANAGEMENT参数的不同设置,Oracle数据库要么使用撤销段,要么使用回滚段。
Undo表空间

一个数据库可以存在多个撤销表空间,但是在任意给定时刻都只能使用一个撤销表空间。撤销表空间必须被创建为持久的、本地管理的并且能够自动扩展分配空间的表空间。
事务与Undo段

在某个事务启动时,Oracle会为其指派一个撤销段。任何一个事务都只能受一个撤销段保护,一个事务生成的撤销数据无法被分配到多个撤销段中。

在某个事务更新表和索引数据块时,回滚该变化所需的信息会被写入指定撤销表空间的数据块。撤销数据在提交后过期的事实意味着可以采用循环方式使用撤销段。如果使用原有的、人工管理的回滚段,那么调整的重要环节是控制具体事务分别受哪些回滚段保护。
管理Undo

1.与Undo相关的错误条件

管理撤销的原则十分简单:首先,应当始终存在允许所有事务继续进行的足够撤销空间;其次,应当始终存在保证查询成功的足够撤销数据。如果某个事务耗尽了撤销空间,那么这个事务就会由于Oracle错误“ORA-30036 unable to extend segment in undo tablespace(无法扩展撤销表空间内的撤销段)”而失败。

2.用于Undo管理与Undo保留保证的参数

下面3个初始化参数可以控制撤销:

UNDO_MANAGEMENT:默认为manual,就是不会使用撤销段。默认设置是为了实现向后兼容性,最后不要使用默认。建议设置为 AUTO,启用使用撤销段的自动撤销管理。参数是静态的。

UNDO_TABLESPACE:如果使用了“UNDO_MANAGEMENT=AUTO”,就一定要指定该参数。该参数指定了一个作为有效撤销表空间的表空间,并且该表空间必须已被创建为一个撤销表空间,同时其内部的所有撤销段都会被自动联机。

UNDO_RETENTION:可选,以秒为单位进行设置的参数。指定了保留过期撤销数据的目标位置。如果配置了保证撤销保留,那么该参数就不是可选的。针对撤销的默认模式是:对于事务与查询来说,Oracle更倾向于维护事务。10G版本中存在保证撤销保留的选项,意味着经过 UNDO_RETENTION参数所指定的时间之前,撤销数据决不会被重写。

3.调整与监视Undo表空间

撤销表空间应当足够大,算法的话,首先计算在最高工作负荷时生成撤销的速度,然后再乘以耗时最长的查询的时间长度。

4.删除与缩小Undo表空间

创建一个撤销表空间时,Oracle会在这个表空间内创建一个撤销段池。

自定义分类:
计算机IT
 
参考资料:
百度百科
 
贡献者:
norain
Copyright © 1999-2024 C114 All Rights Reserved | 联系我们 | 沪ICP备12002291号-4