oracle 12C 新特性之临时undo控制

1          Oracle 12C 临时undo

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

根据临时undo作用,我们进行在临时表创建中的redo日志生成情况的观看。

1.1     关闭临时undo设置

SQL> show user;

USER is "SCOTT"

SQL> show con_name

 

CON_NAME

------------------------------

PDBA

SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');

 

NAME                                      VALUE

---------------------------------------------------------------- ----------

redo entries                                  2

redo size                                     736

SQL> create global temporary table temp_gui as select * from dba_objects where 1=2;

 

Table created.

 

SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');

 

NAME                                      VALUE

---------------------------------------------------------------- ----------

redo entries                                105

redo size                                 28364

可以看出,在只有ddl操作的情况下,redo变化情况还是非常明显的。

SQL> insert into temp_gui select * from dba_objects;

 

91718 rows created.

 

SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');

 

NAME                                      VALUE

---------------------------------------------------------------- ----------

redo entries                                   2948

redo size                                      632172

从上面的结果可以看到,在有dml操作(inert)时,产生了大量的redoRedo日志的变化非常的明显。

SQL> show parameter temp_undo

 

NAME                         TYPE           VALUE

------------------------------------------------------

temp_undo_enabled            boolean        FALSE

1.2     启用临时undo设置

重新登录会话,修改临时undo参数测试

SQL> alter session set temp_undo_enabled=true;

 

Session altered.

 

SQL> show parameter temp_undo

 

NAME                         TYPE       VALUE

------------------------------------ -----------

temp_undo_enabled            boolean    TRUE

SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');

 

NAME                                      VALUE

---------------------------------------------------------------- ----------

redo entries                                  2

redo size                                     736

SQL> insert into temp_gui select * from dba_objects;

 

91718 rows created.

 

SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');

 

NAME                                      VALUE

---------------------------------------------------------------- ----------

redo entries                                  3

redo size                                  1016

从上面结果可以看到,此次测试中,redo数据的产生极其的小。

我们做多次的数据inert看看结果:

SQL> insert into temp_gui select * from dba_objects;

 

91718 rows created.

 

SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');

 

NAME                                      VALUE

---------------------------------------------------------------- ----------

redo entries                                  3

redo size                                  1016

 

SQL> insert into temp_gui select * from dba_objects;

 

91718 rows created.

 

SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');

 

NAME                                      VALUE

---------------------------------------------------------------- ----------

redo entries                                  3

redo size                                  1016

 

SQL> select count(*) from temp_gui;

 

  COUNT(*)

----------

    275154

 

SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');

 

NAME                                      VALUE

---------------------------------------------------------------- ----------

redo entries                                  3

redo size                                  1016

同样没有新的redo数据产生。

结论:

1、在oracle 12C中,提供了关于全局临时变redo生成控制的参数temp_undo_enabled,该参数默认为false,此时临时表会产生一定量的redo信息,而当将该参数修改为true时,将抑止redo信息的产生,从而大大节省redo的存储空间以及在一定的程度上降低了数据库性能的开销。

版权所有,转载请注明出处

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28612416/viewspace-1402349/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28612416/viewspace-1402349/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值