合 Oracle 12c 新特性之临时Undo--temp_undo_enabled
Tags: Oracle
每个 Oracle 数据库包含一组与系统相关的表空间,例如 SYSTEM , SYSAUX , UNDO&TEMP ,并且它们在 Oracle 数据库中每个都用于不同的目的。 在 Oracle 12c 之前,临时表生成的 Undo 记录是存储在 Undo 表空间 和 Redo 日志文件中 的,通用表和持久表的 undo 记录也是 存储在 Undo 表空间中的,从 Oracle 12c 开始 ,临时 Undo 记录可以存储在 临时表空间中,且不再记录到 Redo 日志文件中, 这样做的主要好处在于: 减少 Undo 表空间 的使用 , 且 减少了 Redo 数据的生成 。可以在会话级别或者数据库级别来启用临时 Undo 选项。
Temporary undo records are stored in the database's temporary tablespaces and thus are not logged in the redo log. When temporary undo is enabled, some of the segments used by the temporary tablespaces store the temporary undo, and these segments are called temporary undo segments .You can enable or disable temporary undo for a session or for the system. To do so, set the TEMP_UNDO_ENABLED initialization parameter.
系统会广泛使用临时表作为暂存区来存放中间结果。这是因为更改这些表的速度远远超过更改非临时表的速度。性能之所以会改进,主要是因为不会为临时表中的更改直接生成重做条目。但是,对临时表(和索引)的操作的还原数据仍会记录在重做日志中。
临时表的还原数据对于在临时对象生存期中实现读取一致性和事务处理回退非常有用。除此之外,不需要该还原数据。因此,它无需保存在重做流中。例如,事务处理恢复将放弃临时对象的还原数据。
从 Oracle Database 12c 开始,可以将由临时表的事务处理生成的还原数据直接存储在临时表空间的一个单独还原流中,以避免将该还原数据记录在重做流中。这种新模式称为临时还原。
注:临时还原段是会话专用的。它将存储对属于相应会话的临时表(一般为临时对象)所做的更改的还原数据。
临时 Undo :优点和设置
• 临时 Undo 可减少 Undo 表空间中存储的 Undo 数据量。
• 临时 Undo 可减小重做日志的大小。
• 临时 Undo 支持在具有 Oracle Active Data Guard 选件的物理备用数据库中对临时表执行 DML 操作。
SQL> ALTER SESSION SET TEMP_UNDO_ENABLED = TRUE;
SQL> ALTER SYSTEM SET TEMP_UNDO_ENABLED = TRUE;
• 会话首次使用临时对象时会选择临时还原模式。
启用临时还原具有以下优点:
• 临时还原可减少还原表空间中存储的还原数据量。还原表空间中的还原数据越少,还原记录所需要的还原保留期越实际。
• 临时还原可减小重做日志的大小。由于写入重做日志的数据较少,因此性能会有所提高,并且由于要进行语法分析的重做数据较少,因此,用于对重做日志记录进行语法分析的组件(如 LogMiner )性能也会有所提高。
• 临时还原支持在具有 Oracle Active Data Guard 选件的物理备用数据库中对临时表执行数据操纵语言 (DML) 操作。但是,必须在主数据库上发出创建临时表的数据操纵语言 (DDL) 操作。
可以为特定会话或整个系统启用临时还原。为某个会话启用临时还原时,该会话将创建临时还原,而不影响其他会话。当会话首次使用临时对象时,系统将为该会话的其余部分设置 TEMP_UNDO_ENABLED 初始化参数的当前值。因此,如果为某个会话启用了临时还原,并且该会话使用临时对象,则无法为该会话禁用临时还原。同样,如果为某个会话禁用了临时还原,并且该会话使用临时对象,则无法为该会话启用临时还原。为系统启用临时还原时,所有现有会话和新会话都将创建临时还原。
(一) 启用临时 undo 功能
要使用这一新功能,需要做以下设置:
ü 兼容性参数必须设置为 12.0.0 或更高
ü 启用 TEMP_UNDO_ENABLED 初始化参数
ü 由于临时 undo 记录现在是存储在一个临时表空间中的,你需要有足够的空间来创建这一临时表空间
ü 对于会话级,你可以使用: ALTER SYSTEM SET TEMP_UNDO_ENABLE=TRUE;
(二) 查询临时 undo 信息
以下所列的字典视图是用来查看或查询临时 undo 数据相关统计信息的:
ü V$TEMPUNDOSTAT
ü DBA_HIST_UNDOSTAT
ü V$UNDOSTAT
要禁用此功能,你只需做以下设置:
SQL> ALTER SYSTEM|SESSION SET TEMP_UNDO_ENABLED=FALSE;
SELECT to_char(BEGIN_TIME,'dd/mm/yy hh24:mi'),
TXNCOUNT,MAXCONCURRENCY,UNDOBLKCNT,USCOUNT,
NOSPACEERRCNT
FROM V$TEMPUNDOSTAT;
V$TEMPUNDOSTAT 显示了与此数据库实例的临时还原日志相关的各种统计信息。它将显示统计数据直方图,以展示系统的运行情况。该视图的每一行会保存从实例中收集的 10 分钟间隔统计信息。各个行按 BEGIN_TIME 列值降序排列。此视图总共包含 576 行,跨越一个四天周期。此视图与 V$UNDOSTAT 视图类似。该示例显示了 V$TEMPUNDOSTAT 视图中的一些重要列:
•BEGIN_TIME :确定时间间隔的开始。
•TXNCOUNT :在相应的时间间隔内绑定到临时还原段的事务处理总数。
•MAXCONCURRENCY :并行执行的最多事务处理数,这些事务处理会在相应的时间间隔内修改临时对象。
•UNDOBLKCNT :在相应的时间间隔内占用的临时还原块总数。