如果Oracle临时表空间不释放,可以尝试以下方法解决:
SELECT s.sid, s.serial#, p.spid, s.username, s.program, t.used_ublk, t.used_urec, t.status
FROM v$session s, v$process p, v$transaction t
WHERE s.paddr = p.addr
AND s.saddr = t.ses_addr (+)
AND t.used_ublk IS NOT NULL;
如果存在长时间运行的事务或会话,可以尝试终止相关会话或事务。
SELECT COUNT(*) FROM dba_rollback_segs WHERE status = 'NEEDS RECOVERY';
如果有未提交的事务,可以尝试回滚这些事务。
SELECT tablespace_name, sum(bytes_used) / 1024 / 1024 "Used (MB)", sum(bytes_free) / 1024 / 1024 "Free (MB)"
FROM v$temp_space_header
GROUP BY tablespace_name;
如果发现某个临时表空间使用量非常大,可以尝试扩展该表空间的大小。
如果问题仍然存在,请考虑联系Oracle支持团队进行进一步的故障排除和解决方案。