查询数据库服务器时发现数据库服务器磁盘使用空间达到了%分析总共的数据文件也不可能达到如此大经过查询发现原来临时表空间的使用情况达到了 G导致磁盘空间使用紧张搜索了相应的文档与资料后查出临时表空间主要使用在
索引创建或重创建
ORDER BY or GROUP BY (这个是罪魁祸首)
DISTINCT 操作
UNION & INTERSECT & MINUS SortMerge joins Analyze 操作
有些异常将会引起temp暴涨(这个也很有可能)
下面是重新创建一个临时表空间把原来的默认临时表空间drop掉(包括里面的临时数据文件)再重新建立
SQL> create temporary tablespace temp
tempfile &#;/home/oracle/oracle/product//oradata/hatest/temppdf&#; size M reuse
autoextend on next k maxsize unlimited;
Tablespace created
SQL> alter database default temporary tablespace temp;
Database altered
SQL> drop tablespace temp including contents and datafiles;
Tablespace dropped
(注意由于临时表空间的数据文件比较大所以这步可能会花费比较长的时间)
SQL> create temporary tablespace temp
tempfile &#;/home/oracle/oracle/product//oradata/hatest/temppdf&#; size M reuse
autoextend on next K maxsize unlimited;
Tablespace created
SQL> alter database default temporary tablespace temp;
Database altered
SQL> drop tablespace temp including contents and datafiles;
Tablespace dropped
SQL> exit
以上的方法只是暂时释放了临时表空间的磁盘占用空间是治标但不是治本的方法真正的治本的方法是找出数据库中消耗资源比较大的sql语句然后对其进行优化处理下面是查询在sort排序区使用的执行耗时的SQL
Select seusernamesesidsuextentssublocks*to_number(rtrim(pvalue))as Spacetablespacesegtypesql_text
from v$sort_usage suv$parameter pv$session sev$sql s
where pname=&#;db_block_size&#; and susession_addr=sesaddr and shash_value=susqlhash and saddress=susqladdr
order by seusernamesesid