Oracle 临时表空间满!

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;
     表空间已丢弃。

原文地址:https://www.cnblogs.com/storymedia/p/4436184.html