Oracle 临时表空间慢是因为有大量的排序数据或其他临时数据占用造成的,也就是说如果一个有上千万天的记录你的临时空间又很小这个时候你只要select * 也许马上就就会满掉!解决此类问题的办法是为临时表空间增加临时文件,但是有时候你的临时表空间足够大但是仍然让频繁的查询占用满那怎么办?修改SQL语句呗!呵呵临时解决就是把目前的临时表空间替换掉!
1.查看临时文件的使用/剩余空间
col tablespace_name format a10
select * from v$temp_space_header;
TABLESPACE FILE_ID BYTES_USED BLOCKS_USED BYTES_FREE BLOCKS_FREE RELATIVE_FNO
---------- ---------- ---------- ----------- ---------- ----------- ------------
TEMP 1 1048576 128 156237824 19072 1
2.查看当前用户所属的临时表空间
SQL> select username ,temporary_tablespace from dba_users;
USERNAME TEMPORARY_TABLESPACE
----------- ------------------------------
SYS TEMP1
SYSTEM TEMP1
DBSNMP TEMP1
HUJINPEI TEMP1
ALAN1 TEMP1
PERFUSER TEMP1
ALAN2 TEMP1
MYUSER TEMP1
OUTLN TEMP1
WMSYS TEMP1
已选择10行。
3.查看当前有那些临时文件。
SQL> select name from v$tempfile;
NAME
----------------------------------------
/opt/oracle/oradata/ictest/temp1_01.dbf
4.重新建立一个临时表空间:
SQL> create temporary tablespace temp
2 tempfile '/opt/oracle/oradata/ictest/temp01.dbf' size 1000M ;
临时表空间已创建
SQL> alter tablespace temp add tempfile '/opt/oracle/oradata/ictest/temp02.dbf' size 1000M;
5.将建好的TEMP表空间设置为数据库默认的临时表空间:
SQL> alter database default temporary tablespace temp;
数据库已更改。
SQL> select username,temporary_tablespace from dba_users;
USERNAME TEMPORARY_TABLESPACE
------------ ---------------------------
SYS TEMP
SYSTEM TEMP
DBSNMP TEMP
HUJINPEI TEMP
ALAN1 TEMP
PERFUSER TEMP
ALAN2 TEMP
MYUSER TEMP
OUTLN TEMP
WMSYS TEMP
已选择10行。
6.DROP掉旧的TEMP1的表空间:
SQL> drop tablespace temp1 including contents and datafiles;
表空间已丢弃。