在线移动表或分区(ALTER TABLE MOVE ONLINE)
Oracle在线操作命令
-- Move the table to another tablespace / reorganize it (DML continues):
ALTER TABLE customer_app.orders MOVE ONLINE TABLESPACE customer_data;
-- Compress while moving (BASIC; for OLTP compression use ROW STORE COMPRESS ADVANCED):
ALTER TABLE customer_app.orders MOVE ONLINE COMPRESS;
-- A single partition:
ALTER TABLE customer_app.sale_part
MOVE PARTITION p2026_h1 ONLINE TABLESPACE customer_archive UPDATE INDEXES;
-- Verify: indexes must stay VALID
SELECT index_name, status FROM dba_indexes
WHERE owner = 'CUSTOMER_APP' AND table_name = 'ORDERS';
SELECT table_name, tablespace_name, compression, compress_for
FROM dba_tables
WHERE owner = 'CUSTOMER_APP' AND table_name = 'ORDERS';作用
重写表段:减少碎片并降低高水位线、更换表空间、应用压缩。使用 ONLINE 时,操作期间 DML 不被阻塞,索引自动维护并保持 VALID。
适用场景
用于大批量删除后回收空间、将表迁移到新的表空间/存储,以及将旧分区压缩到归档表空间。
注意
需要 Enterprise Edition;ROW STORE COMPRESS ADVANCED 需要 Advanced Compression 选件(额外付费)。该操作需要与表大小相等的额外空间,并产生大量 redo。开始和结束时会获取短暂的锁;长时间未结束的事务会使其等待。不带 ONLINE 或 UPDATE INDEXES 的 MOVE 会使所有索引变为 UNUSABLE。