寻仙东山岛破阵,男篮热身赛,幸存者的钱袋
官网:
从Oracle11g开始,在默认安装中oracle会自动管理undo, 典型安装中不需要DBA介入配置,然而,如果选择了flash back特性,你就需要进行一些undo管理任务,来保证flashback特性的成功执行。 本章包含如下内容:
See Also:
查看如何创建由Oracle数据库创建并管理数据文件的undo表空间
Oracle创建并管理用于回滚,撤销,更改到数据库的信息,此类信息主要包括事务的操作的记录,主要是在他们被提交前,这些记录被统称为undo。
undo记录的作用主要包括:
当ROLLBACK命令被提交时,undo记录被用来撤销未提交的事务对数据库做的变更。在数据库恢复时,undo记录用来撤销未被提交的redo log对数据文件做的变更。undo记录通过记录之前的数据映像的方式实现一个用户访问正在由另一个用户修改的数据时的读一致性。
这个章节介绍自动undo管理的概念,并讨论如下主题:
用于管理撤消信息和空间,Oracle 提供了一个完全自动化的机制,称为自动撤消管理。使用自动撤消管理,数据库在undo表空间中管理undo段。从Oracle11g开始,自动undo管理是新创建数据库的默认模式。在使用DBCA 创建数据库时会自动创建一个自动扩展的undo表空间UNDOTBS1 。
undo表空间也可以被手工创建,创建方法参考.
当实例启动时,数据库自动选择第一个可用的undo表空间。如果没有可用的undo表空间,实例就以没有undo表空间的方式启动,并存储undo记录在system表空间。这是不被推荐的,并且会在alert日志中记录警告'the system is running without an undo tablespace'.
如果在数据库中存在多个undo表空间,你可以选择指定其中一个作为undo表空间。这可以通过初始化参数 UNDO_TABLESPACE 设定。例:
UNDO_TABLESPACE = undotbs_01
如果指定的undo表空间不存在,则startup命令会失败。在Oracle RAC 环境中可为每个实例单独指定undo表空间。
数据库也可运行在手工undo管理模式,在此模式下,undo空间通过回滚段管理,并且不使用undo表空间。
Note:
回滚段的空间管理相当复杂,Oracle 强烈建议将数据库置于自动Undo管理模式.
如下是undo管理初始化参数的总结:
Initialization Parameter | Description |
UNDO_MANAGEMENT | 如果是auto或空,则使用自动undo管理,如果等于MANUAL, |
UNDO_TABLESPACE | 可选,只在自动undo管理模式下生效,指定了undo表空间名。只当数据库有多个undo表空间时并且在你需要指定实例访问特定的undo表空间时使用。 |
如果使用了自动undo管理模式,那么初始化参数中关于手工管理undo的参数将失效。
Note:
在早期的版本中,oracle默认是手工管理模式。如果要使用自动undo管理,你需要首先创建一个undo表空间,然后修改 UNDO_MANAGEMENT 初始化参数为 AUTO. 如果你的数据库是9i或之后的版本,并且你想修改为自动undo管理,请查看 .
空的UNDO_MANAGEMENT在11g之后默认为自动undo管理,但是在之前默认为手工管理.所以在升级到11g的时候需要小心该参数. Oracle Database Upgrade Guide 描述了迁移到自动undo管理的正确方式,包含了如何设定undo表空间大小的信息。
在事务被提交以后,undo数据就不再被事务回滚和事务恢复需要。然而对于读一致性的目的来说,长查询(long-running queries)可能会需要这部分早期的undo信息来提供数据块更早的映像信息。而且Oracle Flashback 特性也依赖于早期的undo信息的可用性。出于这些原因,undo信息保留的越久越好。
当使用了自动undo管理,就会有一个当前的undo retention period, 它指定了在Undo信息被覆盖前会被oracle保留的最短时间。那些比当前的undo retention period老的(被提交)的undo信息被称为过期的(expired),并且它们的空间是可以被当前事务覆盖的。那些还未超出现在的undo retention period的undo信息被称为未过期的(unexpired),会为一致性读和Oracle Flashback操作保留。
Oracle 会依据undo表空间大小和系统的活动自动调整undo保留期,你也可以通过修改 UNDO_RETENTION 初始化参数自由设定最小的undo保留期。它的直接影响是:
oracle依据undo表空间的配置自动调整undo保留期。
如果你准备修改undo表空间为固定大小,你必须指定它足够大,如果空间太小,会报 如下两个错误:
See for more information
Note:
自动调整undo保留期不支持LOB类型.这是因为LOB类型的undo信息保留在他自己的LOB段而不是undo段。对于LOB,数据库尝试使用UNDO_RETENTION设定的最小的undo保留期。然后如果空间变低,未过期的LOB undo信息可能会被覆盖。
See Also:
为了保证数据库满足最长的查询或或者闪回操作,你可以使用retention guarantee. 如果retention guarantee被使用,指定的最小的undo保留期就被保证了; 数据库永远不覆盖未过期undo数据,即使事务因为undo表空间不足而失败。如果没使用retention guarantee ,数据库会在undo空间较低时覆盖未过期数据,这样就降低了系统的undo保留期。该选项(retention guarantee)默认被禁用
WARNING:
使用retention guarantee 会导致并行DML操作失败. 小心使用.
使用retention guarantee可通过在创建数据库或创建undo表空间时指定retention guarante子句来设定。或者,稍候你可以在alter tablespace语句中添加该子句。禁用该特性通过retention noguarantee子句。
可以通过查看 DBA_TABLESPACES 视图查看retention guarantee设置,retention
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Oracle字符串函数length、upper、lower、initcap、 concat、instr、replace
网友评论