Oracle临时表空间是用来存储临时数据的,什么时候会生成这些临时数据呢?
当在做表的数据排序的时候,默认情况下排序是会在内存里面完成,如果排序量比较大,在内存当中无法存储这么大的数据量的时候,那么排序会将排序的中间结果数据放在磁盘上面,这么大的数据量会将排序的中间结果放在磁盘上面,也就是临时表空间上面。会在临时表空间上面建立段,用于存放排序的中间数据。
还有分组汇总的统计查询的时候会有临时数据生成,还有在建立索引的时候和表连接操作的时候都会有临时数据,这个时候会用到临时表空间。
临时表空间是用于存放临时数据的,不能存放永久数据的,对于oracle来说都会有一个默认的临时表空间,可以有多个临时表空间,但是默认的只有一个。
SQL> select TABLESPACE_NAME,CONTENTS from dba_tablespaces; --可以看到默认的临时表空间是user_temp
TABLESPACE_NAME CONTENTS
------------------------------ ---------
SYSTEM PERMANENT
SYSAUX PERMANENT
TDS PERMANENT
UNDOTBS2 UNDO
USER_TEMP TEMPORARY
UNDOTBS3 UNDO
SQL> select USERNAME,TEMPORARY_TABLESPACE from dba_users; --可以看到所有用户的默认的临时表空间是user_temp,这些用户要排序的时候就使用这个默认的临时表空间来排序
USERNAME TEMPORARY_TABLESPACE
------------------------------ ------------------------------
SYS USER_TEMP
SYSTEM USER_TEMP
SCOTT USER_TEMP
OUTLN USER_TEMP
DIP USER_TEMP
ORACLE_OCM USER_TEMP
APPQOSSYS USER_TEMP
DBSNMP USER_TEMP
8 rows selected.
SQL> create temporary tablespace temp1 --新添加一个临时表空间,默认的临时表空间只有一个,用户使用的还是默认的临时表空间
2 tempfile '/u01/app/oracle/oradata/oradb/temp1.01.dbf' size 100m uniform size 1024k;
可以将临时表空间加到组里面
SQL> select file#,status,bytes/1024 from v$tempfile;
FILE# STATUS BYTES/1024
---------- ------- ----------
2 ONLINE 102400
1 ONLINE 102400
SQL> alter tablespace USER_TEMP tablespace group tmpgp; --将上面的user_temp表空间加入到tmpgp组
Tablespace altered.
SQL> alter tablespace temp1 tablespace group tmpgp; ---将tmp1表空间加入到tmpgp组
Tablespace altered.
SQL> select * from dba_tablespace_groups; --可以看到两个临时表空间加入到tmpgp的组里面了,这个临时表空间组是不需要提前去创建的,将临时表空间加入这个组这个组就会自动生成,如果这个组的临时表空间都退出的话这个组就自动消失了,非常灵活。
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
TMPGP USER_TEMP
TMPGP TEMP1
SQL> alter database default temporary tablespace tmpgp; --将临时表空间组作为整个数据库的临时表空间
Database altered.
SQL> select USERNAME,TEMPORARY_TABLESPACE from dba_users; --所有用户授权临时表空间都会向tmpgp组索取临时数据的存储
USERNAME TEMPORARY_TABLESPACE
------------------------------ ------------------------------
SYS TMPGP
SYSTEM TMPGP
SCOTT TMPGP
OUTLN TMPGP
DIP TMPGP
ORACLE_OCM TMPGP
APPQOSSYS TMPGP
DBSNMP TMPGP
8 rows selected.
tmpgp临时表空间组里面有两个临时表空间,还可以加入新的临时表空间。当用户需要存储临时数据的时候向tmpgp发出请求需要临时段,然后根据两个临时表空间使用的情况进行分配临时段。这种方式就用起来非常简单高效了,在10G以后管理临时表空间尽量使用临时表空间组的方式来管理,这个可以将多个临时表空间都利用起来。