是,oracle shrink space操作要求表必须启用row movement,否则报ora-10636;同时需表空间为assm(segment_space_management='auto'),且表不能含long、iot或嵌套表等不支持对象。

表是否启用行移动(ENABLE ROW MOVEMENT)
Oracle 的 SHRINK SPACE 操作要求表必须开启行移动功能,否则执行会报错 ORA-10636: row movement is not enabled。这是最直接的前置判断条件。
检查方式很简单:
SELECT table_name, row_movement FROM user_tables WHERE table_name = 'YOUR_TABLE';
返回值为 ENABLED 才表示支持在线收缩;若为 DISABLED,需先执行:
ALTER TABLE your_table ENABLE ROW MOVEMENT;
注意:ENABLE ROW MOVEMENT 不锁表,但会影响依赖该表的物化视图刷新逻辑(如有),且对含 LONG 类型列的表不生效——这类表必须先转为 CLOB 才能启用。
表空间是否使用 ASSM(自动段空间管理)
SHRINK SPACE 仅在 ASSM 表空间中可用。如果表位于手动段管理(MSM)表空间,执行会报 ORA-10635: Invalid segment or tablespace type。
确认方法:
SELECT tablespace_name, extent_management, segment_space_management FROM dba_tablespaces WHERE tablespace_name = (SELECT tablespace_name FROM user_tables WHERE table_name = 'YOUR_TABLE');
关键字段是 segment_space_management,必须为 AUTO。常见误区是误以为只要表空间是本地管理(LOCAL)就支持 shrink——其实还必须是 AUTO 段管理。
如果当前是 MANUAL,无法在线修改,只能重建表空间或迁移表。
是否存在 LONG、嵌套表或 IOT 索引组织表的主键约束
以下三类对象不支持 SHRINK SPACE:
-
LONG或LONG RAW列(哪怕只有一列) - 嵌套表(
NESTED TABLE)作为列类型 - IOT 表(
INDEX ORGANIZED TABLE)带主键约束(INCLUDING子句或OVERFLOW段存在时)
快速筛查语句:
SELECT t.table_name, c.data_type
FROM user_tab_columns c, user_tables t
WHERE c.table_name = t.table_name
AND c.data_type IN ('LONG', 'LONG RAW')
AND t.table_name = 'YOUR_TABLE';
若查到结果,必须先改造结构:比如将 LONG 改为 CLOB(ALTER TABLE ... MODIFY col CLOB),再启用行移动。
另外,IOT 表即使满足其他条件,也**不能**用 SHRINK SPACE,只能用 MOVE + REBUILD 组合,且会锁表较久。
是否处于只读表空间或含不可 shrink 的对象依赖
即使表本身满足所有条件,若它所在的表空间被设为只读(READ ONLY),SHRINK SPACE 会直接失败,报 ORA-01642: begin backup not active for tablespace 类似错误(实际是权限/状态拦截)。
检查命令:
SELECT tablespace_name, status FROM dba_tablespaces WHERE tablespace_name = (SELECT tablespace_name FROM user_tables WHERE table_name = 'YOUR_TABLE');
此外,如果该表被物化视图日志引用(MATERIALIZED VIEW LOG),或者有未完成的 Flashback Data Archive(FDA)策略绑定,shrink 也可能被拒绝。这类依赖通常不会报明确提示,而是卡在等待或静默失败——建议收缩前用 DBA_MVIEW_LOGS 和 DBA_FLASHBACK_ARCHIVE_TABLES 排查。
真正容易被忽略的是:shrink 是「段级」操作,它不关心索引是否在线,但要求整个段(包括 LOB 段、溢出段)都可写。哪怕一个 CLOB 列指向了只读表空间中的 LOB 段,也会导致失败。











