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

Oracle使用全局临时表也会有Redo

DB小榴莲 2018-12-22
1595

全局临时表在ORACLE 8i中被引进,当创建一张全局临时表,该表的字典定义即被创建,但是只有在第一次往表中填充数据时,临时段才会被分配,就是说只有用户对全局临时表做第一次插入操作或者CTAS操作时,才会为全局临时表分配存储空间。

 


全局临时表被创建在用户的默认临时表中。不同用户使用相同的全局临时表时,他们使用的是不同的全局临时段,不同用户可见的数据不同,他们只看到自己的表定义和表数据,其他什么也看不到。


既然是临时表,那么就意味着存放在其中的数据也是临时的,用户在结束使用全局临时表时,这部分数据也会自动清除。

 

全局临时表有两种级别,一种是会话级别,另外一种是事务级别,全局临时表创建语句如下


create global temporary table tab_name(id number)

on [commit preserve|delete rows]

 

on commit rows表示事务级别

on commit preserve rows表示会话级别

 

用户可以在全局临时表中创建索引、触发器和视图,但是在创建索引之前,必须保证表是空的。


当用户truncate一张表时,他只是truncate了自己的表数据。

 

用户对全局临时表操作本身不会产生redo,但是undo操作会产生一部分redo。

 

创建一张全局临时表

 

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

 

Table created.

 

SQL> select count(*) from temp_table;

 

 COUNT(*)

----------

         0


从统计信息中可以可以看出,有534K的redo生成

 

 

 

SQL> delete from temp_table;

 

72926 rows deleted.

 

从统计信息中可以可以看出,有27M的redo生成


最后修改时间:2021-06-23 11:18:17
文章转载自DB小榴莲,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论