清理temp表空间
temp.dbf 文件过大,需要清理下
方法:
创建新的临时表空间temp03并设置为默认临时表空间、
下掉原temp表空间
删除原temp.rdf文件
重走一遍下掉temp03表空间,换回temp表空间
1.1查看临时表空间和其包含的文件
select d.file_name, d.file_id, d.tablespace_name, d.bytes from dba_temp_files d;
1.2创建新的临时表空间
create temporary tablespace temp03 tempfile 'C:\ORACLE\ORADATA\ORACLE\temp03.dbf' size 512M reuse autoextend on next 100M maxsize unlimited;
1.3把新建的临时表空间换成数据库的默认临时表空间
alter database default temporary tablespace temp02;
1.4 确认目前数据库的默认临时表空间
select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';
1.5 在删除temp临时表空间之前,先把运行在temp临时表空间的sql语句kill掉,不然旧文件可能还会在使用中,或者在空载状态操作
--这样的sql语句多为排序的语句
select a.username,a.sid,a.serial#,a.tablespace,a.sql_text,'alter system kill session '''||a.sid||','||a.serial#||''';' "alter kill" from(
select se.username,se.sid,se.serial#,su.tablespace,s.sql_text
from v$sort_usage su,v$session se,v$sql s
where su.session_addr=se.saddr and s.hash_value=su.sqlhash and s.address=su.sqladdr and tablespace='TEMP'
group by se.username,se.sid,se.serial#,su.tablespace,s.sql_text
) a
-- (假如某一条运行的sql语句的SID为524,serial#为778)
-- alter system kill session '524,778';
1.6替换掉原来的大文件,然后再改回默认临时空间
alter database tempfile 'C:\ORACLE\ORADATA\ORACLE\TEMP01.DBF' drop;
1.7下掉temp表空间
drop tablespace temp including contents and datafiles;
可以观察到 temp表空间已经有替换成temp03表空间,上述步骤重新走一遍,将 temp03再替换回temp