全局临时表在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生成





