清理temp表空间

发布时间 2023-12-22 15:04:29作者: 赵钱富贵

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