Oracle LOB段空间占用过多,如何通过ALTER TABLE MOVE操作优化清理?
- 内容介绍
- 文章标签
- 相关推荐
本文共计737个文字,预计阅读时间需要3分钟。
请提供需要改写的原文,我将按照您的要求进行改写。
lob段空间不会因delete或truncate自动释放,必须执行alter table ... move并显式指定lob子句,否则lob段原地不动。
为什么DELETE后空间不释放?
Oracle中LOB数据删除后,空间不会立即归还给表空间,而是进入“延迟回收”状态,需等待undo_retention超时才可能复用。即使TRUNCATE TABLE,若LOB列存储在SECUREFILE=NO(即BasicFile)模式下,其对应SYS_LOB***$$段仍保留在原位置,物理空间不收缩。
- 普通表行删除 → 空间可快速复用
- LOB列删除 → 空间标记为“待回收”,但段头未重置,
dba_segments中大小不变 - 现象:查
dba_segments发现SYS_LOB0000136091C00003$$仍占255GB,但表里已无数据
MOVE操作必须带LOB子句,否则无效
只写ALTER TABLE t MOVE,表段会迁移,但LOB段仍卡在原表空间、原位置,完全不移动——这是最常踩的坑。
本文共计737个文字,预计阅读时间需要3分钟。
请提供需要改写的原文,我将按照您的要求进行改写。
lob段空间不会因delete或truncate自动释放,必须执行alter table ... move并显式指定lob子句,否则lob段原地不动。
为什么DELETE后空间不释放?
Oracle中LOB数据删除后,空间不会立即归还给表空间,而是进入“延迟回收”状态,需等待undo_retention超时才可能复用。即使TRUNCATE TABLE,若LOB列存储在SECUREFILE=NO(即BasicFile)模式下,其对应SYS_LOB***$$段仍保留在原位置,物理空间不收缩。
- 普通表行删除 → 空间可快速复用
- LOB列删除 → 空间标记为“待回收”,但段头未重置,
dba_segments中大小不变 - 现象:查
dba_segments发现SYS_LOB0000136091C00003$$仍占255GB,但表里已无数据
MOVE操作必须带LOB子句,否则无效
只写ALTER TABLE t MOVE,表段会迁移,但LOB段仍卡在原表空间、原位置,完全不移动——这是最常踩的坑。

