1 临时表空间
临时表空间存储只在会话期间保存的临时数据。当排序操作不能再内存中完成时,临时表空间可以提高它们的并发性,同时也能提高操作排序期间的空间管理效率。
临时表空间用来存储下面四类对象:
- 中间的排序结果
- 临时表和临时索引
- 临时LOB
- 临时B-tree
临时表空间可以在实例之间共享,一个临时表空间内,一个实例的所有排序操作共享一个排序分段。第一个使用临时表空间排序的sql语句创建排序分段,这个排序分段在创建后一直存在,在实例关闭时,Oracle会释放排序分段。
从Oracle 12.2开始,用户可以创建本地管理的临时表空间。本地管理的临时表空间不能在实例间共享,只能用于sql语句的临时结果,比如排序,hash聚合,以及连接。这些结果只能在一个实例中访问。说到临时表空间,一般指的是共享临时表空间,如果是RAC,临时表空间通常创建在共享磁盘上。
数据库安装时默认会创建一个默认的临时表空间,名称为temp,这个表空间是所有用户的临时表空间。
SQL> select distinct TABLESPACE_NAME from dba_temp_files; TABLESPACE_NAME ------------------------------TEMP
临时表空间可以在用户级设置,也可以在数据库级设置
SQL>alter database default temporary tablespace TBS_TEMP1; Database altered. SQL>selectdistinct TEMPORARY_TABLESPACE from dba_users; TEMPORARY_TABLESPACE ------------------------------ TBS_TEMP1
也可以在用户级设置
SQL>alter user test temporary tablespace TBS_TEMP2; User altered. SQL>select USERNAME,TEMPORARY_TABLESPACE from dba_users where username='TEST'; USERNAME TEMPORARY_TABLESPACE ------------------------------ ------------------------------ TEST TBS_TEMP2
2 临时表空间组
表空间组使一个用户能够使用多个表空间内的临时空间。表空间组可能只用于临时表空间。一个表空间不足以存储排序结果的时,可以使用表空间组,特别是在一个表有很多分区的时候这种情况容易发生。表空间则也使一个单一并行操作的多个并行执行服务器使用不同的临时表空间。当一个用户有多个会话同时登录时,不同的会话也会使用不同的临时表空间。
表空间组不需要单独创建,在创建临时表空间时可以指定表空间组,后面创建的临时表空间也可以指定相同的组。表空间组在组内的最后一个临时表空间删除后被删除。
SQL>create temporary tablespace tbs_temp1 tempfile size 10M tablespace group tbg1; Tablespace created. SQL>create temporary tablespace tbs_temp2 tempfile size 10M tablespace group tbg1; Tablespace created. --创建了一个临时表空间组,里面有两个临时表空间,查询一个当前的表空间组SQL>select*from DBA_TABLESPACE_GROUPS;GROUP_NAME TABLESPACE_NAME ------------------------------ ------------------------------TBG1 TBS_TEMP1 TBG1 TBS_TEMP2
用PL SQL dev连接至数据库
另一个会话
这两个会话的id分别是197和131,查询这两个会话使用的临时表空间
SQL>select username, session_num, tablespace from v$sort_usage;USERNAME SESSION_NUM TABLESPACE ------------------------------ ----------- -------------------------------TEST 23 TBS_TEMP2 TEST 23 TBS_TEMP2 TEST 53 TBS_TEMP1
这里的session_num 对应v$session中的serial#,查询一下这两个会话的sid
SQL>select sid, serial# from v$session where serial# in(23,53); SID SERIAL# ---------- ----------1315319723