Oracle数据库的UNDO管理主要有两种模式:自动(AUTO)和手动(MANUAL)。
在自动模式(undo_management=AUTO)下,Oracle服务器会自动管理UNDO信息和空间。这意味着,当设置为AUTO时,Oracle实例会在启动时自动选择一个UNDO表空间,如果没有UNDO表空间可用,实例将使用SYSTEM表空间存储UNDO记录,这通常不推荐。自动模式下,如果初始化参数文件中包含手动UNDO管理的参数,这些参数将被忽略。
在手动模式(undo_management=MANUAL)下,需要手动创建和管理回滚段(Rollback Segments)。这是Oracle 9i之前的唯一方法。在手动模式下,可以使用rollback_segments参数来分配一个或多个回滚段给实例,如果设置了这个参数,实例将获取所有在参数中命名的回滚段,即使回滚段的数量超过了实例的最小需求。
在自动模式下,Oracle数据库会根据需要自动创建和调整UNDO段,这些UNDO段分布在不同的UNDO表空间中。如果需要,可以使用undo_tablespace参数在启动时指定使用特定的UNDO表空间。在自动模式下,undo_retention参数用于设置UNDO数据在被覆盖前保留的时间长度,单位是秒,这应该基于系统中大查询运行的时间长度来决定,以避免ORA-01555错误。
在手动模式下,如果使用隐含参数_offline_rollback_segments和_corrupted_rollback_segments标记当前UNDO表空间的所有回滚段,数据库启动时Oracle可能仍然会创建一个新的非系统回滚段,直到UNDO表空间容量耗尽。
总的来说,Oracle推荐使用自动UNDO管理模式,因为它可以减少DBA的管理负担,并提高数据库的效率和稳定性。如果需要进行特殊的UNDO管理,可以切换到手动模式,并创建和管理自己的回滚段。




