一.检查过程
(1) 我们可以查查数据库alert日志
例如:/u0/admin/sm/bdump/alert_sm.log
数据库中并没有报temp表空间的错,一般来说不报错,可以先不管,因为没有temp表空间可能由于没有需要用到而不释放空间。
(2) 我们可以用这个语句查一下
SELECT se.username,sid,serial#,sql_address,machine,program,tablespace,segtype,contents
from v$session se,v$sort_usage su
WHERE se.saddr=su.session_addr;
其实v$session是会话信息,v$sort_usage是正在使用排序段的会话。
可以检查当前数据库有没有语句正在用排序段,如果有的话可以使用一下语句删除寻找出的相关语句:
SQL>alter system kill session 'sid,serial#';
(3) 检查temp表空间是不是自动扩展的
SQL>select file_name,bytes/1024/1024 "MB",autoextensible,tablespace_name from dba_temp_files;
(4) 查询目前数据库中默认的临时表空间
SQL>select * from database_properties where property_name like 'DEFAULT%';
或SQL>select username,temporary_tablespace from dba_users;
二.处理过程
(1) 重起数据库,看看有没有释放临时表空间
Smon进程会完成临时段释放,TEMP表空间的清理操作,不过很多的时侯我们的库是不允许down的,所以这种方法缺少了一点的应用机会,不过这种方法还是很好用的。
(2) 如果检查出temp表空间是自动扩展的,建议先修改成非自动扩展
由于数据库temp表空间是自动扩展,有可能它不断使用新的空间,建议先把它变成非自动扩展。
例如:
alter database tempfile '/u0/oradata/sm/temp01.dbf' autoextend off;
(3) 如果temp表空间不是自动扩展,而且空间比较小
例如:数据库的temp表空间只有1.6G,觉得可以扩大一点,扩大3G左右
SQL> alter system temp add tempfile '/u0/oradata/sm/temp02.dbf' size 3096M;
(4) 如果temp表空间由于自动扩展变得太大,可以新建一个temp表空间把它取代
详细可参看eygle大师的"Oracle9i中如何重建与切换临时表空间"
http://www.eygle.com/archives/2006/04/oracle9i_default_temporary_tablespace.html
例如:用temp2表空间取代temp表空间
SQL> create temporary tablespace temp2 tempfile '/opt/oracle/oradata/conner/temp1.dbf' size 10M autoextend off;
SQL> alter tablespace temp add tempfile '/opt/oracle/oradata/conner/temp2.dbf' size 20M;
SQL> alter databa