重建TEMP表空间是最稳妥解法,因其不自动回收已分配临时段;需新建temp2、切换默认、确认无会话使用旧TEMP、再drop tablespace including contents and datafiles。temp 表空间不释放空间,不是因为没清理,而是因为 oracle 默认不自动回收已分配的临时段------直接重建 temp 是最稳妥的解法。TEMP 表空间使用率长期 100% 却查不到活跃排序这是典型现象:dba_temp_free_space 显示已用 100%,但 vsort_usage 或 vsession 找不到大排序会话。原因在于临时文件(tempfile)一旦扩展,Oracle 不会自动收缩,即使所有排序结束,空间仍被标记为"已分配但空闲"。别信 alter database tempfile ... resize 能直接缩容------若高位有未释放的区(extent),会报错 ORA-03297: file contains used data beyond requested RESIZE value检查真实空闲空间用:select tablespace_name, round((free_blocks*block_size)/1024/1024) free_mb from vtemp_space_header;(注意是 vtemp_space_header,不是 dba_free_space)临时表空间不支持 shrink space,任何试图对 tempfile 做 shrink 的操作都会失败重建 TEMP 表空间的最小安全步骤必须在数据库 open 状态下完成,无需停机,但需确保无应用正在执行大规模排序或建索引(否则新 TEMP 尚未就绪时会报错 ORA-01652: unable to extend temp segment)。新建临时表空间:create temporary tablespace temp2 tempfile '/u01/oradata/ORCL/temp02.dbf' size 1024m autoextend on next 100m maxsize 8g;切换默认临时表空间:alter database default temporary tablespace temp2;确认无会话还在用旧 TEMP:select sid, serial#, username, program from v$session where tempseg_used > 0 and tablespace = 'TEMP';(结果应为空)删除旧 TEMP:drop tablespace temp including contents and datafiles;(加 including contents 才能删掉里面的临时段)为什么不能只删 tempfile、保留表空间?临时表空间可以没有 tempfile,但此时任何需要排序的操作都会立即失败------Oracle 不允许 tempfile 全部 offline 或全部被 rm 掉后还维持表空间存在。 MacsMind 电商AI超级智能客服
相关推荐
2301_777599372 小时前
Go语言怎么用sync.Map_Go语言并发安全Map教程【详解】zhangchaoxies2 小时前
Go语言如何用定时器_Go语言time.Ticker定时器教程【详解】Rsun045512 小时前
14、Java 模板方法模式从入门到实战2501_914245932 小时前
如何用 setCustomValidity 自定义表单验证失败的提示文本2301_817672262 小时前
bootstrap如何修改标签页切换的过渡时间2301_771717212 小时前
AQS极简版覆东流2 小时前
第3天:Python print深入与格式化输出蓝色的杯子2 小时前
JWT 到底怎么用?一篇讲透 + FastAPI 鉴权实战zhangchaoxies2 小时前
JavaScript中Tree-shaking失效的场景及其优化对策