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

Oracle 12C 临时undo

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

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

1、关闭临时undo设置

SQL> show user
USER is "TBCS"
SQL> show con_name


CON_NAME
------------------------------
XULQ1

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_xulq1 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                                                            106
redo size                                                             44488
                          
--- 可以看出,在只有 ddl 操作的情况下, redo 变化情况还是非常明显的。
SQL> insert into temp_xulq1  select * from dba_objects;
95134 rows created.
SQL> commit;
Commit complete.
SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo entries                                                           3068
redo size                                                            672812
从上面的结果可以看到,在有dml操作(inert)时,产生了大量的redoRedo日志的变化非常的明显。
SQL> show parameter temp_undo
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
temp_undo_enabled                    boolean     FALSE

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_xulq1  select * from dba_objects;

95134 rows created.

SQL> insert into temp_xulq1  select * from dba_objects;

95134 rows created.

SQL> commit;

Commit complete.

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


NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo entries                                                              4
redo size                                                              1164

从上面结果可以看到,此次测试中, redo 数据的产生极其的小。
我们做多次的数据inert看看结果:
SQL> insert into temp_xulq1  select * from dba_objects;
95134 rows created.
1
2
3
4
SQL>  select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo entries                                                              8
redo size                                                              1976

结论:

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



















你可能感兴趣的:(oracle)