Oracle 10g 引进了临时表空间组(temporary tablespace group)的概念,它允许用户在不同的会话中同时利用多个临时表空间。
1. 临时表空间组的主要特征 一个临时表空间组必须由至少一个临时表空间组成,并且无明确的最大数量限制。
如果删除了一个临时表空间组的所有成员,该组也自动被删除。
临时表空间的名字不能与临时表空间组的名字相同。
在给用户分配一个临时表空间时,可以使用临时表空间组的名字代替实际的临时表空间名;在给数据库分配默认临时表空间时也可以使用临时表空间组的名字。
2. 临时表空间组的有点 使用临时表空间组而非普通的临时表空间,有如下好处:
由于SQL查询可以并发使用几个临时表空间进行排序操作,因此SQL查询很少会出现排序空间超出,避免当临时表空间不足时所引起的磁盘排序问题。
可以在数据库级指定多个默认临时表空间。
一个并行操作的并行服务器将有效地利用多个临时表空间。
一个用户在不同会话中可以同时使用多个临时表空间。
3. 管理 临时表空间组 临时表空间组是在创建临时表空间时通过指定GROUP字句创建的。可以将一个表空间从一个组移动另一个组,或是从一个组中删除临时表空间,或是往组里添加新的表空间。
a. 创建临时表空间组 创建临时表空间时指定GROUP:
CREATE SMALLFILE
TEMPORARY TABLESPACE "TEMP01"
TEMPFILE
’/u01/app/oracle/oradata/orcl/temp_tbs_01a.dbf’ SIZE 5M REUSE
AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
UNIFORM. SIZE 1M
TABLESPACE GROUP TBS_GROUP_1
GO
CREATE SMALLFILE
TEMPORARY TABLESPACE "TEMP02"
TEMPFILE
’/u01/app/oracle/oradata/orcl/temp_tbs_02a.dbf’ SIZE 5M REUSE
AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
UNIFORM. SIZE 1M
TABLESPACE GROUP TBS_GROUP_1
GO
CREATE SMALLFILE
TEMPORARY TABLESPACE "TEMP03"
TEMPFILE
’/u01/app/oracle/oradata/orcl/temp_tbs_03a.dbf’ SIZE 5M REUSE
AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
UNIFORM. SIZE 1M
TABLESPACE GROUP TBS_GROUP_2
GO
CREATE SMALLFILE
TEMPORARY TABLESPACE "TEMP04"
TEMPFILE
’/u01/app/oracle/oradata/orcl/temp_tbs_04a.dbf’ SIZE 5M REUSE
AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
UNIFORM. SIZE 1M
TABLESPACE GROUP TBS_GROUP_2
GO
b. 查询临时表空间组 SELECT * FROM DBA_TABLESPACE_GROUPS
GROUP_NAME TABLESPACE_NAME
TBS_GROUP_1 TEMP01
TBS_GROUP_1 TEMP02
TBS_GROUP_2 TEMP03
TBS_GROUP_2 TEMP04
c. 临时表空间的移动 可以将“未分组”或“已分组”的临时表空间移动到指定的 临时表空间中,或者是移出:
•将未分组的临时表空间TEMP_01加入分组TBS_GROUP_1
ALTER TABLESPACE TEMP_01 TABLESPACE GROUP TBS_GROUP_1
•将已分组的临时表空间TEMP_01加入分组TBS_GROUP_2
ALTER TABLESPACE TEMP01 TABLESPACE GROUP TBS_GROUP_2
•将已分组的临时表空间TEMP04移除分组TBS_GROUP_2
ALTER TABLESPACE TEMP04 TABLESPACE GROUP ’’
查看结果:
SELECT * FROM DBA_TABLESPACE_GROUPS
GROUP_NAME TABLESPACE_NAME
TBS_GROUP_1 TEMP02
TBS_GROUP_1 TEMP_01
TBS_GROUP_2 TEMP01
TBS_GROUP_2 TEMP03
d. 把临时表空间组指定给用户 •查看用户的默认表空间
SELECT USERNAME, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE
FROM DBA_USERS
•创建用户时指定
CREATE USER zhangzj IDENTITY BY zhangzj
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE tbs_group_1
•修改已有用户
ALTER USER ZHANGZJ TEMPORARY TABLESPACE TBS_GROUP_1
e. 设置数据库临时表空间组
ALTER DATABASE ORCL DEFAULT TEMPORARY TABLESPACE TBS_GROUP_1
f. 同一个用户的不同session使用不同的临时表空间 首先用sys用户查询:
SELECT USERNAME, SESSION_NUM, TABLESPACE FROM V$SORT_USAGE
测试过程:
新开session1执行
SQL> conn zhangzj/zhangzj
已连接。
SELECT A.TABLE_NAME, B.TABLE_NAME
FROM DICT A, DICT B ORDER BY A.TABLE_NAME
新开session2执行
SQL> conn zhangzj/zhangzj
已连接。
SELECT A.TABLE_NAME, B.TABLE_NAME FROM DICT A, DICT B
sys查询:
SQL> SELECT USERNAME, SESSION_NUM, TABLESPACE FROM V$SORT_USAGE;
USERNAME SESSION_NUM TABLESPACE
ZHANGZJ 35743 TEMP01
ZHANGZJ 25683 TEMP02
可以发现,同一个用户ZHANGZJ的两个session分别使用了两个不同的临时表空间。
g. 删除临时表空间组 即:删除组成临时表空间组的所有临时表空间
先查看要删除的 临时表空间组包含哪些 临时表空间
SELECT * FROM DBA_TABLESPACE_GROUPS
然后删除 这些临时表空间,即可
DROP TABLESPACE TEMP01 INCLUDING CONTENTS AND DATAFILES
GO
DROP TABLESPACE TEMP02 INCLUDING CONTENTS AND DATAFILES
GO
责任编辑:小草