Oracle收缩临时表空间(三)

2014-11-24 17:54:50 · 作者: · 浏览: 2
sname,t.name,(t.bytes/1024/1024) mb,t.status
2 from v$tablespace s,v$tempfile t
3 where s.ts# = t.ts#;

TBSNAME NAME MB STATUS
--------------- -------------------------------------------------- ---------- -------
GO_TEMP /u02/database/ORADB/temp/ORADB_tempORADB.dbf 106 ONLINE
TEMP2 /u02/database/ORADB/temp/ORADB_temp02.dbf 10 ONLINE


-->也可以使用下面的命令来完成仅仅删除单个文件
ALTER DATABASE TEMPFILE '/u02/database/ORADB/temp/tempORADB.dbf' DROP INCLUDING DATAFILES; -->删除单个文件


7、根据需求可以创建原来的临时表空间并将切换出去用户切换到此临时表空间


三、总结


1、关注alert_.log文件中的ORA-1652错误并调查什么原因导致该错误。有些时候并不是由于当前的SQL 导致临时表空间不能扩展,很可能由于前一个SQL耗用了99%的临时表空间,而后一个SQL执行时即出现错误。对于此类情况应调查前一SQL并调整避免过多的磁盘排序。


2、如果基于空间压力应该关闭临时表空间的自动扩展。因此为临时表空间设定合理的大小就成了一个问题。个人的解决方案是首先检查ORA-1652


其次是观察业务高峰期的峰值。如前面查询中的字段Max Size(: Maximum number of MB ever used)的值来预估。如果大师们有更好的建议
不妨拍砖。


3、通过重启数据库,临时表空间所耗用的大小有时候并不能缩小。


4、在Oracle 11g之前一般是通过创建中转临时表空间来达到缩小的目的。不是很完美,因为有些时候临时段未释放导致不能删除临时表空间及数据文件。在11g可以直接使用下面的命令来完成:


alter tablespace temp shrink space;


alter tablespace temp shrink tempfile '

' keep n ;


5、系统缺省的临时表空间不能被删除,因此如果系统缺省的临时表空间过大删除前应该新置一个系统缺省的临时表空间。


6、删除过大临时表空间前其上的用户应该先将其设定到中转临时表空间,重建后再将其置回原状态。


7、减少磁盘排序的首要任务调整SQL,如避免笛卡尔积,为表添加合理的索引等。其次要考虑PGA的值是否设定合理。