如何清理oracle系统临时表空间

2024-11-30 02:14:18
推荐回答(2个)
回答1:

首先查看temp是不是某些用户的默认表空间 SELECT USERNAME,TEMPORARY_TABLESPACE FROM DBA_USERS; 如果有用户的默认临时表空间是temp的话,建议进行更改 alter user xxx temporary tablespace tempdefault; 设置tempdefault为默认临时表空间 alter database default temporary tablespace tempdefault; 然后用你列出来的语句删除即可 drop tablespace temp including contents and datafile; 即便丢失了所有的临时表空间,只要不是数据库当中用到了order by、子查询、group by、distinct等需要消耗临时表空间的语句(而且要比较大才行,小的话就直接用pga的SORT_AREA区了),那么也不会对业务造成错误导致中断,发现问题之后只需要新建一个临时表空间就可以了。你要是了解备份恢复的话,实际上在进行备份的时候临时表空间都不会进行备份,而只是有一个创建临时表空间的语句而已。

回答2:

删除默认临时表空间会报ora12906错误,不允许删除。解决法是先创建一个表空间,然后将其设为默认临时表空间。接着再删除。以下是命令:CREATETEMPORARYTABLESPACETEMP2TEMPFILE'E:\TEMP02.DBF'SIZE100MAUTOEXTENDONNEXT640KMAXSIZEUNLIMITEDTABLESPACEGROUP''EXTENTMANAGEMENTLOCALUNIFORMSIZE1M;ALTERDATABASEDEFAULTTEMPORARYTABLESPACETEMP2;删除之前先把使用临时表空间的sessionkill掉查询使用临时表空间的sessionSELECTse.username,se.SID,se.serial#,se.sql_address,se.machine,se.program,su.TABLESPACE,su.segtype,su.CONTENTSFROMv$sessionse,v$sort_usagesuWHEREse.saddr=su.session_addraltersystemkillsession'524,778';(假如某一条运行的sql语句的SID为524,serial#为778)DROPTABLESPACETEMPINCLUDINGCONTENTSANDDATAFILES;