临时表空间
临时表空间:用来存放用户的临时数据,临时数据在需要时被覆盖,关闭数据库后自动删除,其中不能存放永久性数据。
用户进程和服务器进程是一对一的叫做专用连接。
任何一个用户连到oracle
数据库,oracle
都会开一个服务进程和其一一对应。
select * from a order by a.xxx;
非常多的数据进行排序的时候会占用PGA(内存)
列如:
用户对很多数据行进行排序时,排序在PGA
中进行。但如果排序的数据过多,导致内存不足时,oracle
会把会排序的数据分成多份,每次只取一份放到PGA
中进行排序,其他的部分都放到临时表空间(硬盘上)中,同时再从临时表空间(硬盘上)中取一份没有排序的数据到PGA
中进行排序,直到所有数据排序完成。
这种情况一旦发生系统性能降低很快!
临时表空间和临时表空间组
临时表空间组是一组由临时表空间组成的组,临时表空间组和临时表空间不能同名。
临时表空间不能显式的创建和删除;当把第一个临时表空间分配给某个临时表空间组时。
会自动创建这个临时表空间组,将临时表空间组的最后一个临时表删除时,会自动删除临时表空间组。
#查看系统表空间
select * from v$tablespace;
#查看系统表空间(详细)
select * from dba_tablespaces;
太长了就不截了
重点关注这里:
CONTENTS:TEMPORARY(临时表空间)#查看数据文件
select * from dba_data_files;
为什么该查询下没有临时表空间?
#临时表空间是放到了其他地方
#查看临时文件信息
select * from dba_temp_files;
select * from v$tempfile;
#查看临时表空间组的信息
select * from dba_tablespace_groups;
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
查看默认的临时表空间
select *
from database_properties
where property_name= 'DEFAULT_TEMP_TABLESPACE';
创建临时表空间
创建临时表空间,不属于组:
create temporary tablespace temp2 tempfile
'G:\software\oracle\oradata\orcl\temp2a.dbf' size 10m autoextend on;
创建临时表空间,属于组temp_grp
:
create temporary tablespace temp3 tempfile
'G:\software\oracle\oradata\orcl\temp3a.dbf' size 10m autoextend on
tablespace group temp_grp;
把temp2
加入到temp-grp
组中去:
alter tablespace temp2 tablespace group temp_grep;
把temp2
移除temp-grp
组:
alter tablespace temp2 tablespace group '';
给临时表空间添加一个临时文件:
select * from dba_temp_files;
SQL> select * from dba_temp_files;
#只有一个文件
FILE_NAME:G:\SOFTWARE\ORACLE\ORADATA\ORCL\TEMP2A.DBF #添加一个临时文件
alter tablespace temp2 add tempfile 'G:\SOFTWARE\ORACLE\ORADATA\ORCL\TEMP2B.DBF' size 10m autoextend on;#查看临时文件
FILE_NAME
G:\SOFTWARE\ORACLE\ORADATA\ORCL\TEMP2A.DBF
G:\SOFTWARE\ORACLE\ORADATA\ORCL\TEMP2B.DBF
修改系统默认临时表空间、
修改系统默认的临时表空间为一个组:
一个组可以包含一个或者多个临时表空间。
alter database default temporary tablespace temp_grp;select *
from database_properties
where property_name= 'DEFAULT_TEMP_TABLESPACE';
修改系统默认的临时表空间为一个临时表空间:
alter database default temporary tablespace temp2;select *
from database_properties
where property_name= 'DEFAULT_TEMP_TABLESPACE';