Oracle 数据库 临时表空间文件(TEMP01.DBF)太大, 替换的方式缩小
建议在数据库于未使用时操作
1 --查看临时表空间和其包含的文件 2 select d.file_name, d.file_id, d.tablespace_name, d.bytes from dba_temp_files d; 3 4 --创建新的临时表空间 5 create temporary tablespace temp02 tempfile 'C:\ORACLE\ORADATA\ORACLE\temp03.dbf' size 512M reuse autoextend on next 100M maxsize unlimited; 6 --把新建的临时表空间却换成数据库的默认临时表空间 7 alter database default temporary tablespace temp02; 8 --确认目前数据库的默认临时表空间 9 select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE'; 10 11 --在删除temp临时表空间之前,先把运行在temp临时表空间的sql语句kill掉,不然旧文件可能还会在使用中,或者在空载状态操作 12 --这样的sql语句多为排序的语句 13 select a.username,a.sid,a.serial#,a.tablespace,a.sql_text,'alter system kill session '''||a.sid||','||a.serial#||''';' "alter kill" from( 14 select se.username,se.sid,se.serial#,su.tablespace,s.sql_text 15 from v$sort_usage su,v$session se,v$sql s 16 where su.session_addr=se.saddr and s.hash_value=su.sqlhash and s.address=su.sqladdr -- and tablespace='TEMP' 17 group by se.username,se.sid,se.serial#,su.tablespace,s.sql_text 18 ) a 19 20 -- (假如某一条运行的sql语句的SID为524,serial#为778) 21 --alter system kill session '524,778'; 22 23 --替换掉原来的大文件,然后再改回默认临时空间 24 alter database tempfile 'C:\ORACLE\ORADATA\ORACLE\TEMP01.DBF' drop; 25 alter tablespace temp add tempfile 'C:\ORACLE\ORADATA\ORACLE\TEMP01.DBF' size 1024M reuse autoextend on next 100M; 26 alter database default temporary tablespace temp; 27 28 ---在删掉 新建的临时空间和文件 也可以不用改回去,直接删掉旧的,但是磁盘上的文件可能还在且无法删除!!! 29 drop tablespace temp including contents and datafiles;
PS: 我直接删除旧临时空间和文件
drop tablespace temp including contents and datafiles;
结果文件在磁盘上任何操作都提示无权限.....(也可能重启后就能删了?)
sql删掉的文件不一定会删掉磁盘上的文件!
修改临时空间为自增长
alter database tempfile 'C:\ORACLE\ORADATA\ORACLE\temp03.dbf' autoextend on next 100M;
问: 表空间`SYSAUX` (SYSAUX01.DBF) 很大, 该怎么收缩??
--- auth:lzpong