Oracle g 引进了临时表空间组(temporary tablespace group)的概念它允许用户在不同的会话中同时利用多个临时表空间
临时表空间组的主要特征
; 一个临时表空间组必须由至少一个临时表空间组成并且无明确的最大数量限制
; 如果删除了一个临时表空间组的所有成员该组也自动被删除
; 临时表空间的名字不能与临时表空间组的名字相同
; 在给用户分配一个临时表空间时可以使用临时表空间组的名字代替实际的临时表空间名;在给数据库分配默认临时表空间时也可以使用临时表空间组的名字
临时表空间组的有点
使用临时表空间组而非普通的临时表空间有如下好处
; 由于SQL查询可以并发使用几个临时表空间进行排序操作因此SQL查询很少会出现排序空间超出避免当临时表空间不足时所引起的磁盘排序问题
; 可以在数据库级指定多个默认临时表空间
; 一个并行操作的并行服务器将有效地利用多个临时表空间
; 一个用户在不同会话中可以同时使用多个临时表空间
管理 临时表空间组
临时表空间组是在创建临时表空间时通过指定GROUP字句创建的可以将一个表空间从一个组移动另一个组或是从一个组中删除临时表空间或是往组里添加新的表空间
创建临时表空间组
创建临时表空间时指定GROUP
CREATESMALLFILE
TEMPORARYTABLESPACETEMP
TEMPFILE
/u/app/oracle/oradata/orcl/temp_tbs_adbfSIZEMREUSE
AUTOEXTENDONNEXTKMAXSIZEUNLIMITED
EXTENTMANAGEMENTLOCAL
UNIFORMSIZEM
TABLESPACEGROUPTBS_GROUP_
GO
CREATESMALLFILE
TEMPORARYTABLESPACETEMP
TEMPFILE
/u/app/oracle/oradata/orcl/temp_tbs_adbfSIZEMREUSE
AUTOEXTENDONNEXTKMAXSIZEUNLIMITED
EXTENTMANAGEMENTLOCAL
UNIFORMSIZEM
TABLESPACEGROUPTBS_GROUP_
GO
CREATESMALLFILE
TEMPORARYTABLESPACETEMP
TEMPFILE
/u/app/oracle/oradata/orcl/temp_tbs_adbfSIZEMREUSE
AUTOEXTENDONNEXTKMAXSIZEUNLIMITED
EXTENTMANAGEMENTLOCAL
UNIFORMSIZEM
TABLESPACEGROUPTBS_GROUP_
GO
CREATESMALLFILE
TEMPORARYTABLESPACETEMP
TEMPFILE
/u/app/oracle/oradata/orcl/temp_tbs_adbfSIZEMREUSE
AUTOEXTENDONNEXTKMAXSIZEUNLIMITED
EXTENTMANAGEMENTLOCAL
UNIFORMSIZEM
TABLESPACEGROUPTBS_GROUP_
GO
查询临时表空间组
SELECT*FROMDBA_TABLESPACE_GROUPS
GROUP_NAMETABLESPACE_NAME
TBS_GROUP_TEMP
TBS_GROUP_TEMP
TBS_GROUP_TEMP
TBS_GROUP_TEMP
临时表空间的移动
可以将未分组或已分组的临时表空间移动到指定的 临时表空间中或者是移出
;将未分组的临时表空间TEMP_加入分组TBS_GROUP_
ALTER TABLESPACE TEMP_ TABLESPACE GROUP TBS_GROUP_
;将已分组的临时表空间TEMP_加入分组TBS_GROUP_
ALTER TABLESPACE TEMP TABLESPACE GROUP TBS_GROUP_
;将已分组的临时表空间TEMP移除分组TBS_GROUP_
ALTER TABLESPACE TEMP TABLESPACE GROUP
查看结果
SELECT*FROMDBA_TABLESPACE_GROUPS
GROUP_NAMETABLESPACE_NAME
TBS_GROUP_TEMP
TBS_GROUP_TEMP_
TBS_GROUP_TEMP
TBS_GROUP_TEMP
把临时表空间组指定给用户
;查看用户的默认表空间
SELECTUSERNAMEDEFAULT_TABLESPACETEMPORARY_TABLESPACE
FROMDBA_USERS
;创建用户时指定
CREATEUSERzhangzjIDENTITYBYzhangzj
DEFAULTTABLESPACEusers
TEMPORARYTABLESPACEtbs_group_
;修改已有用户
ALTERUSERZHANGZJTEMPORARYTABLESPACETBS_GROUP_
设置数据库临时表空间组
ALTERDATABASEORCLDEFAULTTEMPORARYTABLESPACETBS_GROUP_
同一个用户的不同session使用不同的临时表空间
首先用sys用户查询
SELECTUSERNAMESESSION_NUMTABLESPACEFROMV$SORT_USAGE
测试过程
新开session执行
SQL>connzhangzj/zhangzj
已连接
SELECTATABLE_NAMEBTABLE_NAME
FROMDICTADICTBORDERBYATABLE_NAME
新开session执行
SQL>connzhangzj/zhangzj
已连接
SELECTATABLE_NAMEBTABLE_NAMEFROMDICTADICTB
sys查询
SQL>SELECTUSERNAMESESSION_NUMTABLESPACEFROMV$SORT_USAGE;
USERNAMESESSION_NUMTABLESPACE
ZHANGZJTEMP
ZHANGZJTEMP
可以发现同一个用户ZHANGZJ的两个session分别使用了两个不同的临时表空间
删除临时表空间组
即删除组成临时表空间组的所有临时表空间
先查看要删除的 临时表空间组包含哪些 临时表空间
SELECT*FROMDBA_TABLESPACE_GROUPS
然后删除 这些临时表空间即可
DROPTABLESPACETEMPINCLUDINGCONTENTSANDDATAFILES
GO
DROPTABLESPACETEMPINCLUDINGCONTENTSANDDATAFILES
GO