对于全局临时表,有一个非常闪耀的亮点就是可以避免大量的redo产生,这是我们都知道的。文档68098.1中也有说明。

其实在对全局临时表做DML操作时,还是会产生一些redo的,这部分主要来自于undo,文档848852.1中也有说明。

那么,写这篇文章的目的就是想通过一个测试提醒大家,使用全局临时表,有时也会产生大量的redo。特别是在delete操作的时候,所以,如果使用全局临时表的出发点在于减少redo,那么要引起注意,请参照如下的测试:

———————————————————————–

1,create global temporary table temp

SQL>create global temporary table temp as select  * from dba_objects;


2,check there is no record
SQL> select count(*) from temp;

 COUNT(*)
———-
        0

3,enable autotrace
SQL>set autotrace on

4,insert into data
SQL> insert into temp select * from dba_objects;

18181 rows created.

Statistics
———————————————————-
       733  recursive calls
      1359  db block gets
      1149  consistent gets
       129  physical reads
     99056  redo size   <<<<<<<<<99K redo
       843  bytes sent via SQL*Net to client
       799  bytes received via SQL*Net from client
         3  SQL*Net roundtrips to/from client
        91  sorts (memory)
         0  sorts (disk)
     18181  rows processed


5,delete data
SQL> delete from temp;

Statistics
———————————————————-
        53  recursive calls
     19629  db block gets
       348  consistent gets
         0  physical reads
   5499048  redo size  <<<<<<<<<<5M redo size
       844  bytes sent via SQL*Net to client
       773  bytes received via SQL*Net from client
         3  SQL*Net roundtrips to/from client
         6  sorts (memory)
         0  sorts (disk)
     18181  rows processed