1. 临时表空间简介
临时表空间是一个磁盘空间,主要用于内存排序区不足而必须将数据写到磁盘的那个逻辑区域中。由于该空间在排序操作完成后可以由Oracle系统自动释放,因此也被称作临时表空间。临时表空间主要用于临时段,而临时段是由数据库根据需要进行创建、管理和删除的。这些临时段的生成通常与排序之类的操作有关,下面的几种操作经常会用到临时表空间。
SELECT DISTINCT不重复检索。 UNION联合查询。 MINUS计算。 ANALYZE分析。 连接两张没有索引的表。
2. 创建临时表空间
通常使用CREATE TEMPORARY TABLESPACE语句来创建临时表空间。
创建一个临时表空间,空间大小为300 MB,代码如下:
create temporary tablespace temp_02 tempfile '/opt/oracle/oradata/ORCLCDB/temp_02.tpf' size 300m;
在创建完临时表空间之后,可以通过ALTER DATABASE命令修改默认的临时表空间为新创建的临时表空间,这样Oracle系统就会使用新创建的临时表空间来存储临时数据。
把新创建的临时表空间temp_02设置为系统默认的临时表空间,代码如下:
alter database default temporary tablespace temp_02;
临时表空间是用临时文件而不是数据文件来创建的。另外,临时表空间不需要备份。临时表空间中数据的修改也不会被记录到重做日志中。
3. 查询临时表空间的信息
Oracle将临时表空间与相应的临时文件信息存储在dba_temp_files数据字典当中。在v$tempfiles视图中,可以查看临时表空间的使用情况。
查询系统的临时表空间信息,包括临时文件、空间大小和空间名称,代码如下:
col file_name for a40;
col tablespace_name for a10;
select file_name,bytes,tablespace_name from dba_temp_files;

4. 管理临时表空间组
在Oracle中,可以先创建多个临时表空间,然后把它们组成一个临时表空间组。这样,应用系统中的数据在排序时就可以使用组中的多个临时表空间。在一个临时表空间组中至少有一个临时表空间,其最大个数没有限制,但是组的名称不能和其中某个临时表空间的名称相同。使用临时表空间组来管理临时数据具有以下作用:
避免因大量的排序数据而导致单一临时表空间容量不足。 当一个用户同时有多个会话时,可以使得它们使用组中的不同临时表空间。 使并行的服务器在单结点上能够使用多个临时表空间。
可以在创建临时表空间的同时创建临时表空间组,如果删除组中的全部临时表空间,那么该组也将消失。另外,也可以将一个临时表空间从一个组移动到另一个组中,或是向组中添加新的表空间。
4.1. 创建临时表空间组
创建临时表空间组主要使用GROUP子句。
创建一个临时表空间组,并向其中添加两个临时表空间,代码如下:
create temporary tablespace tp1 tempfile '/opt/oracle/oradata/ORCLCDB/tp1.tpf' size 10m tablespace group group1;
create temporary tablespace tp2 tempfile '/opt/oracle/oradata/ORCLCDB/tp2.tpf' size 20m tablespace group group1;
4.2. 转移临时表空间到另一个组中
转移临时表空间到另一个组中主要使用ALTER TABLESPACE语句。
创建临时表空间组group3,将组group1中的临时表空间tp1转移到group3中,代码如下:
--创建临时表空间组group3
create temporary tablespace tp3 tempfile '/opt/oracle/oradata/ORCLCDB/tp3.tpf' size 10m tablespace group group3;
--将组group1中的临时表空间tp1转移到group3中
alter tablespace tp1 tablespace group group3;
--查看组group3中的临时表空间
select * from dba_tablespace_groups where group_name='GROUP3';

4.3. 把临时表空间组分配给指定的用户使用
把临时表空间组分配给指定的用户需要使用ALTER USER语句来实现。
--把临时表空间组group3分配给scott用户使用
alter user scott temporary tablespace group3;
4.4. 设置默认的临时表空间组
设置默认的临时表空间组主要使用ALTER DATABASE语句来实现。
--修改数据库的默认表空间组为group3
alter database ORCLCDB default temporary tablespace group3;
4.5. 删除临时表空间组
删除临时表空间组主要通过删除组成临时表空间组的所有临时表空间来实现。
--删除组group3中的tp1临时表空间
drop tablespace tp1 including contents and datafiles;
--查看组group3中的临时表空间
select * from dba_tablespace_groups where group_name='GROUP3';

可以看到删除tp1临时表空间后,临时表空间组GROUP3仍然存在,只有删除该组中的全部临时表空间(即必须将临时表空间tp3也删除),组group3才能被删除。
--删除组group3中的tp3临时表空间
drop tablespace tp3 including contents and datafiles;
--查看组group3中的临时表空间
select * from dba_tablespace_groups where group_name='GROUP3';

可以看到,在删除了组group3中的全部临时表空间之后,组group3自身也被删除了。
今天的文章就到这里,如果对你有用,记得点个【赞】和【在看】,感谢阅读~




