关于临时表空间组的概念和简单描述可以参考Oracle官方文档的“Oracle Database SQL Reference”(http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7003.htm#SQLRF01403)。更多信息可以参考MOS的“10g: Temporary Tablespaces Group [ID 245645.1]”文章。 本文就临时表空间组的创建及简单维护做一个实践。
1.数据库版本信息 SQL> select * from v$version;
BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod PL/SQL Release 10.2.0.1.0 - Production CORE 10.2.0.1.0 Production TNS for Linux: Version 10.2.0.1.0 - Production NLSRTL Version 10.2.0.1.0 - Production
2.创建临时表空间组TEMP_GRP,其中包含两个临时表空间TEMP1、TEMP2 sys@ora10g> create temporary tablespace TEMP1 tempfile '/oracle/oradata/ora10g/temp1_01.dbf' size 10m autoextend on tablespace group group1;
Tablespace created.
sys@ora10g> create temporary tablespace TEMP2 tempfile '/oracle/oradata/ora10g/temp2_01.dbf' size 10m autoextend on tablespace group group1;
Tablespace created.
3.使用DBA_TABLESPACE_GROUPS视图可以查看临时表空间组的信息 sys@ora10g> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME ------------------------------ ------------------------------ GROUP1 TEMP1 GROUP1 TEMP2
可见,临时表空间组GROUP1包含了两个临时表空间TEMP1和TEMP2。满足了我们临时表空间组创建的要求。
4.指定临时表空间组GROUP1为所有新创建的用户的默认临时表空间 sys@ora10g> alter database default temporary tablespace GROUP1;
Database altered.
sys@ora10g> create user secooler identified by secooler;
User created.
sys@ora10g> select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users where username = 'SECOOLER';
USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE -------------- --------------------- --------------------- SECOOLER USERS GROUP1
OK,此时新创建的secooler用户的默认临时表空间已经指定到了临时表空间组GROUP1上。
5.将临时表空间TEMP2移动到临时表空间组GROUP2 sys@ora10g> alter tablespace TEMP2 tablespace group GROUP2;
Tablespace altered.
sys@ora10g> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME ------------------------------ ------------------------------ GROUP1 TEMP1 GROUP2 TEMP2
系统中本没有GROUP2临时表空间组,此处系统会自动创建这个数据库对象。
6.移除临时表空间组中所有临时表空间后临时表空间组会自动删除 sys@ora10g> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME ------------------------------ ------------------------------ GROUP1 TEMP1 GROUP2 TEMP2
sys@ora10g> alter tablespace TEMP2 tablespace group '';
Tablespace altered.
sys@ora10g> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME ------------------------------ ------------------------------ GROUP1 TEMP1
7.临时表空间组应用一例 sys@ora10g> alter tablespace TEMP2 tablespace group GROUP1;
Tablespace altered.
sys@ora10g> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME ------------------------------ ------------------------------ GROUP1 TEMP1 GROUP1 TEMP2
开启两个不同的session连接到secooler用户执行下面排序语句 secooler@ora10g> select a.table_name, b.table_name from all_tables a, all_tables b order by 1;
经过反复尝试之后可以看到同一个用户的不同session可以使用到临时表空间组中的不同临时表空间 sys@ora10g> select username, session_num, tablespace from v$sort_usage;
USERNAME SESSION_NUM TABLESPACE ------------------------------ ----------- ------------------------------- SECOOLER 1506 TEMP1 SECOOLER 3662 TEMP2
8.小结 使用临时表空间组的优势及注意事项: 1.临时表空间组中可以包含无数个临时表空间,没有限制,这样扩大了临时表空间的大小,保证有充足的临时表空间; 2.临时表空间组的名字不可以和已有的临时表空间名字相同; 3.临时表空间组不是显式创建的,而是随临时表空间被指定到临时表空间组时隐式创建的。当临时表空间组中的所有临时表空间被移除或被删除之后,该临时表空间组也随即被删除; 4.同一个用户连接的多个会话可以使用到临时表空间组中的不同临时表空间,提高系统的性能。
Good luck.
secooler 10.07.13
-- The End --
|