EXCHANGE PARTITION 比 INSERT 快得多,因为它不移动数据页,仅原子性交换元数据,毫秒级完成,前提是源表与目标分区结构严格一致,否则触发 ORA-14097/14098 等校验错误。
EXCHANGE PARTITION 为什么比 INSERT 快得多
因为 EXCHANGE PARTITION 不移动实际数据页,只交换元数据(比如分区定义、对象ID、统计信息指针),本质是原子性地重命名两个表的存储结构。只要源表和目标分区结构完全一致(列名、顺序、类型、NULL 属性、约束、索引结构),整个操作通常在毫秒级完成。
常见错误现象:ORA-14097: column type or size mismatch in ALTER TABLE EXCHANGE PARTITION 或 ORA-14098: index mismatch on exchanged partition——说明 DDL 不严格对齐。
- 源表必须是普通堆表(非 IOT、非临时表),且不能有未禁用的外键引用
- 目标分区所在表需已存在,且该分区不能为空(否则需先
ALTER TABLE ... ADD PARTITION) - 若目标表有全局索引,EXCHANGE 会自动使索引失效(
UNUSABLE),需后续ALTER INDEX ... REBUILD - 建议在 EXCHANGE 前用
DBMS_STATS.LOCK_TABLE_STATS锁定源表统计信息,避免交换后执行计划突变
SWITCH PARTITION 在 SQL Server 中的等价操作
SQL Server 没有 SWITCH PARTITION 语句,但 ALTER TABLE ... SWITCH 是其对应机制,语法更接近 Oracle 的 EXCHANGE,但限制更严:源表必须与目标分区位于同一文件组,且所有索引必须完全对齐(包括填充因子、压缩选项、排序方向)。
典型报错:Msg 4926: ALTER TABLE SWITCH statement failed. The source table has a different number of columns than the target partition.