临时表空间作为排序操作使用。当用户的sql语句使用了order by,group by子句时,Oracle服务器就需要对所选取的数据进行排序。
这时如果排序的数据量很大,那么,此时内存的排序区(PGA中)就可能装不下,因此,Oracle服务器就要把一些中间的排序结果写到磁盘上,即临时表空间中。当用户的sql语句中经常有大规模的排序而内存的排序区不够时,使用临时表空间就可以改进数据库的效率。
临时表空间可以由多个用户共享,在其中不能包含任何永久对象。临时表空间中的排序段是在实例启动后当有第一个排序操作时创建的,排序段在需要时可以通过分配extents来扩展,并一直可以扩展到大于或等于在该实例上所运行的所有排序活动的总和。
当创建临时表空间时,必须使用标准数据块。另外Oracel推荐使用本地管理的表空间
例如:创建一个临时表空间,longshen_temp
1.查询当前数据库有多少表空间及每个表空间的状态和类型
SQL> select tablespace_name,status,contents from dba_tablespaces;
TABLESPACE STATUS CONTENTS
---------- --------- ---------
SYSTEM ONLINE PERMANENT
UNDOTBS1 ONLINE UNDO
SYSAUX ONLINE PERMANENT
TEMP ONLINE TEMPORARY
USERS ONLINE PERMANENT
TEST ONLINE PERMANENT
LONGSHEN ONLINE PERMANENT
LONGSHEN_U ONLINE UNDO
NDO
2.查看temp临时表空间的文件
SQL> select f.file#,t.ts#,f.name,t.name from v$tempfile f,v$tablespace t
2 where f.ts#=t.ts#;
3.创建一个临时表空间longshen_temp
SQL> create temporary tablespace longshen_temp
2 tempfile '/oradata/law/law/longshen_temp.dbf' size 10m
3 extent management local
4 uniform size 2m;
Tablespace created.
4.查询是否创建成功
SQL> select tablespace_name,status,contents from dba_tablespaces
2 where tablespace_name like 'LONG%';
TABLESPACE STATUS CONTENTS
---------- --------- ---------
LONGSHEN ONLINE PERMANENT
LONGSHEN_T ONLINE TEMPORARY
EMP
LONGSHEN_U ONLINE UNDO
NDO
SQL> select f.file#,t.ts#,f.name,t.name from v$tempfile f,v$tablespace t
2 where f.ts#=t.ts#;
FILE# TS# NAME NAME
----- --- ------------------------ ------------------------
1 3 /oradata/law/law/temp01. TEMP
dbf
2 9 /oradata/law/law/longshe LONGSHEN_TEMP
n_temp.dbf
5.查询longshen_temp表空间的参数设置
SQL> select tablespace_name,block_size,extent_management,segment_space_management,min_extlen from dba_tablespaces where tablespace_name like 'LONG%';
TABLESPACE BLOCK_SIZE EXTENT_MAN SEGMEN MIN_EXTLEN
---------- ---------- ---------- ------ ----------
LONGSHEN 8192 LOCAL AUTO 1048576
LONGSHEN_T 8192 LOCAL MANUAL 2097152
EMP
LONGSHEN_U 8192 LOCAL MANUAL 65536
NDO