必须逐个执行ALTER TABLE...MOVE语句,无法单命令批量移动;需过滤VALID对象、加双引号处理大小写、排除系统用户及IOT溢出段;MOVE后索引全失效,须立即重建;LOB、分区、IOT溢出段等须单独迁移;全程需验证段归属与状态。

不能用单条命令批量移动,必须生成并执行一组 ALTER TABLE ... MOVE TABLESPACE 语句。 Oracle 没有 ALTER USER ... MOVE ALL TABLES 或类似语法,所谓“批量”只是靠 SQL 拼接或 PL/SQL 动态执行实现的自动化,本质仍是逐个表操作。
怎么安全生成 MOVE 表的 SQL 脚本
最稳妥的方式是在 SQL*Plus 或 SQL Developer 中运行查询,把结果复制粘贴后执行。关键要过滤无效对象、处理大小写、避开系统对象:
- 必须加
AND status = 'VALID',避免对已被 DROP 但未清理的残留段(如回收站里的)执行 MOVE,否则报ORA-00942: table or view does not exist - 表名含小写字母或特殊字符时,
table_name需用双引号包裹:用SELECT '"' || table_name || '"' FROM ...生成带引号的版本 - 排除系统用户和 IOT 溢出段:
WHERE owner NOT IN ('SYS','SYSTEM','XDB') AND segment_type != 'TABLE PARTITION'(分区表需单独处理) - 示例语句:
SELECT 'ALTER TABLE ' || owner || '.' || '"' || table_name || '"' || ' MOVE TABLESPACE NEW_TBS;' FROM dba_tables WHERE tablespace_name = 'OLD_TBS' AND owner = 'SCOTT' AND status = 'VALID';
MOVE 后索引全部失效,必须立刻重建
ALTER TABLE ... MOVE 只重定位数据行,不更新索引结构,所有普通索引、唯一索引、函数索引都会变成 UNUSABLE 状态。漏掉这步,后续查询可能直接报 ORA-01502,或因走全表扫描而性能骤降。
- 查失效索引:
SELECT index_name, status FROM dba_indexes WHERE table_owner = 'SCOTT' AND status = 'UNUSABLE'; - 重建建议按表关联重建,避免遗漏:
SELECT 'ALTER INDEX ' || i.index_name || ' REBUILD TABLESPACE NEW_TBS;' FROM dba_indexes i JOIN dba_tables t ON i.table_name = t.table_name AND i.table_owner = t.owner WHERE t.tablespace_name = 'NEW_TBS' AND i.status = 'UNUSABLE' AND t.owner = 'SCOTT'; - 注意:重建索引会锁表,且不自动更新统计信息,迁移后需手动执行
DBMS_STATS.GATHER_TABLE_STATS
LOB、分区、IOT 等附属结构必须单独处理
MOVE 表只动主表段,LOB 段、LOBINDEX、分区、IOT 的 OVERFLOW 段都留在原表空间,不显式迁移会导致跨表空间引用,引发空间浪费甚至 ORA-01652(临时段扩展失败)。
- LOB 字段:
ALTER TABLE scott.emp MOVE LOB(photo) STORE AS (TABLESPACE NEW_TBS); - 分区表不能整表 MOVE,必须按分区操作:
ALTER TABLE scott.sales MOVE PARTITION sales_q1_2023 TABLESPACE NEW_TBS; - IOT 表溢出段:
ALTER TABLE scott.iot_table MOVE OVERFLOW TABLESPACE NEW_TBS; - 物化视图日志、临时段、默认表空间设置等依赖项,必须在 DROP 旧表空间前彻底清理,否则
DROP TABLESPACE ... INCLUDING CONTENTS会失败并卡住
真正容易被忽略的是:MOVE 过程中表被加 SS(sub-share)锁,DML 会被阻塞;而生成脚本时若没检查 dba_segments 中是否混有临时段或外部表,执行到一半就可能中断。别指望“跑完脚本就完事”,每一步之后都得验证 dba_segments 和 dba_indexes 的归属与状态。











