暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

12C Temporary UNDO

原创 章芋文 2013-10-22
627
12C的Temporary UNDO特效,xifenfei大哥在blog上写得很详细了,原文地址:http://www.xifenfei.com/4638.html 。

【ORACLE 8i中引进了全局临时表,而且把临时表的数据存储在临时表空间以减少资源开销。全局临时表在临时表空间的数据会随着一个事务或者一个会话而结束。一个临时表上执行dml操作自身不产生redo,因为这些数据是存储在临时表空间,但是这些操作会产生undo,而undo存储是永久表空间,进而undo反过来会产生redo。而对于这些临时表是不需要恢复的,因此这些redo是不是可以不要产生,在ORACLE 12C中引进了Temporary undo的功能(temp_undo_enabled参数控制),很大程度上解决了该问题】摘自xifenfei。

自己做了简单的测试:

[code]SQL> show parameter temp_undo_enabled;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
temp_undo_enabled boolean FALSE
SQL> select name, value from v$mystat natural join v$statname where name = 'redo size' or name = 'redo entries';

NAME VALUE
---------------------------------------------------------------- ----------
redo entries 3
redo size 852

Elapsed: 00:00:00.13
SQL> show user;
USER is "C##AWEN"
SQL> create global temporary table awen_obj as select * from dba_objects where 1=2;

Table created.

Elapsed: 00:00:00.47
SQL> select name, value from v$mystat natural join v$statname where name = 'redo size' or name = 'redo entries';

NAME VALUE
---------------------------------------------------------------- ----------
redo entries 89
redo size 25892

Elapsed: 00:00:00.01
SQL> select name, value from v$mystat natural join v$statname where name = 'redo size' or name = 'redo entries';

NAME VALUE
---------------------------------------------------------------- ----------
redo entries 89
redo size 25892

Elapsed: 00:00:00.00
SQL> show parameter temp_undo_enabled;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
temp_undo_enabled boolean FALSE
SQL> insert into awen_obj select * from dba_objects;

90920 rows created.

Elapsed: 00:00:00.54
SQL> commit;

Commit complete.

Elapsed: 00:00:00.03
SQL> select name, value from v$mystat natural join v$statname where name = 'redo size' or name = 'redo entries';

NAME VALUE
---------------------------------------------------------------- ----------
redo entries 2923
redo size 626868



SQL>conn c##awen/oracle
Connected.
SQL> show parameter temp_undo_enabled;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
temp_undo_enabled boolean FALSE
SQL> alter session set temp_undo_enabled = true;

Session altered.

SQL> show parameter temp_undo_enabled;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
temp_undo_enabled boolean TRUE
SQL> select name, value from v$mystat natural join v$statname where name = 'redo size' or name = 'redo entries';

NAME VALUE
---------------------------------------------------------------- ----------
redo entries 2
redo size 728

SQL> insert into awen_obj select * from dba_objects;

90920 rows created.

SQL> commit;

Commit complete.

SQL> select name, value from v$mystat natural join v$statname where name = 'redo size' or name = 'redo entries';

NAME VALUE
---------------------------------------------------------------- ----------
redo entries 4
redo size 1156[/code]

Redo Log Buffer位于SGA之中,是一块循环使用的内存区域,其中保存数据库变更的相关信息。这些信息以重做条目(Redo Entries)形式存储(Redo Entries也经常被称为Redo Records)。Redo Entries包含重构、重做数据库变更的重要信息,这些变更包括INSERT、UPDATE、DELETE、CREATE、ALTER或者DROP等。在必要的时候Redo Entries被用于数据库恢复。
Redo Entries的内容被Oracle数据库进程从用户的内存空间复制到SGA中的Redo Log Buffer之中。Redo Entries在内存中占用连续的顺序空间,由于Redo Log Buffer是循环使用的,Oracle通过一个后台进程LGWR不断地把Redo Log Buffer的内容写出到Redo Log File中。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论