清空Oracle临时表空间

今天发现一Oracle的SQL语句执行超过了2分钟,因为本人从事的项目数据量都不大,还没遇到过2分钟以上不出结果的时候。因此十分疑惑。执行了一段时间之后,发觉Oracle无法连接出现异常。此时登录Oracle安装服务器,sqlplus无法连接。查看硬盘空间,发现硬盘已满。。。。

经过仔细查看,发现Oracle临时表空间-temp表空间,居然已经有4.2G。于是怀疑之前执行的SQL是否有问题。说实话,这也够夸张的,一个SQL高出4G左右的数据?接下来,重启了Oracle,发现已经不能通过Oracle的SMON进行清理了。于是手工 清空Oracle临时表空间。

//启动数据库
startup
//创建另一个临时表空间
create temporary tablespace TEMP2 TEMPFILE '/opt/ora10/oradata/XE/temp02.dbf' SIZE 10M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED; 
//改变缺省临时表空间为刚刚创建的新临时表空间temp2
alter database default temporary tablespace temp2;
//删除原来临时表空间
drop tablespace temp including contents and datafiles;
//重新创建临时表空间temp
create temporary tablespace TEMP TEMPFILE '/opt/ora10/oradata/XE/temp01.dbf' SIZE 512M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED; 
//重置缺省临时表空间为新建的temp表空间
alter database default temporary tablespace temp;
//删除中转用临时表空间
drop tablespace temp2 including contents and datafiles;
//重新指定用户表空间为重建的临时表空间
alter user scott temporary tablespace temp;

另外当临时表空间数据量不是很大的时候可以使用eygle推荐的方法:

alter tablespace temp permanent;
alter tablespace temp coalesce;
alter tablespace temp temporary; 

[ad#468-60]

Scroll to Top