Oracle 临时表、临时表空间、临时表空间组用法、区别及表空间组优点
临时表
Oracle中的临时表是全局的,需要在数据库设计时创建完成,而不是程序使用时。每个登陆用户都使用这一个相同的临时表,但互相之间看不到彼此的数据,也就是说临时表是会话独立的。并且不产生日志。
Oracle 的临时表分为事务型和会话型。
事务型临时表就是指在事务处理过程中插入的记录只在事务提交或回滚之前有效,一旦事务完成,表中的记录便被自动清除。
会话型临时表指临时表中的数据在本次会话期间一直有效,直到会话结束。会话结束后表中针对此次会话的数据会自动清空。
创建:
CREATE GLOBAL TEMPORARY TABLE tmp_test1 (id int,name varchar2(10)) ON COMMIT PRESERVE(DELETE) ROWS ;
临时表空间
temporary tablespace是用户在做数据排序都操作时临时存放的表空间
查询 v$tempfile\ dba_temp_file
每个用户都有一个默认临时表空间,在创建用户时如果没指定将使用oracle 数据库设置的默认临时表空间,查询方法是:
select property_name,property_value from database_properties where property_value=‘TEMP’
创建例子:
create temporary tablespace test2 tempfile ‘/u01/app/oracle/oradata/ORCL/datafile/temp2.tmp’ size 50m autoextend on;
设为数据库默认:
SQL> aLTER DATABASE DEFAULT TEMPORARY TABLESPACE test2;
Database altered.
设置后以前未指定的用户临时表空间都为最新
临时表空间组
在oracle11g以后,用户可以创建临时表空间组,一个临时表空间组中可以包含一个或多个临时表空间。
临时表空间组中必须由至少一个临时表空间组成,并且无明确的最大数量限制。
如果删除一个临时表空间组的所有成员,该组也自动被删除。
临时表空间的名字不能与临时表空间组的名字相同。
在给用户分配的一个临时表空间时,可以使用临时表空间组的名字代替实际的临时表空间名;在给数据库分配默认临时表空间时,也可以使用临时表空间组的名字。
创建临时表空间组:
临时表空间组不需要特别创建,只需要在创建临时表空间时,
使用teblespace group语句为其指定一个组即可。
查看临时表空间组信息:
数据字典dba_tablespace_grops
移动临时表空间:
使用alter tablespace语句
临时表空间组是在创建临时表空间时通过指定group字句创建的,如果删除组中的全部临时表空间,那么这个组也将消失。
创建例子:
SYS@PROD1 > select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
GROUP01 TEMP2
SYS@PROD1 > alter tablespace temp tablespace group group01;
Tablespace altered.
SYS@PROD1 > select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
GROUP01 TEMP
GROUP01 TEMP2
SYS@PROD1 > select * from dba_temp_files;
FILE_NAME FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS RELATIVE_FNO AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
-------------------------------------------------- ---------- ------------------------------ ---------- ---------- ------- ------------ --- ---------- ---------- ------------ ---------- -----------
/u01/app/oracle/oradata/PROD/temp01.dbf 1 TEMP 20971520 2560 ONLINE 1 YES 3.4360E+10 4194302 80 19922944 2432
/u01/app/oracle/oradata/PROD/temp02.dbf 2 TEMP2 20971520 2560 ONLINE 1 NO 0 0 0 19922944 2432
SYS@PROD1 > /
FILE_NAME FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS RELATIVE_FNO AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
-------------------------------------------------- ---------- ------------------------------ ---------- ---------- ------- ------------ --- ---------- ---------- ------------ ---------- -----------
/u01/app/oracle/oradata/PROD/temp01.dbf 1 TEMP 20971520 2560 ONLINE 1 YES 3.4360E+10 4194302 80 19922944 2432
/u01/app/oracle/oradata/PROD/temp02.dbf 2 TEMP2 20971520 2560 ONLINE 1 NO 0 0 0 19922944 2432
使用临时表空间组,有如下的优点:
1.避免当临时表空间不足时所引起的磁盘排序问题;
2.当一个用户同时有多个会话时,可以使得它们使用不同的临时表空间;
3.使得并行的服务器在单节点上,能使用多个临时表空间 .