DBAtlas · 数据库运维图谱

在线拆分和合并分区

Oracle分区

命令

-- SPLIT: split a range partition in two, keep indexes usable
ALTER TABLE customer_app.sale_part
  SPLIT PARTITION p2026_h2 AT (DATE '2026-10-01')
  INTO (PARTITION p2026_q3, PARTITION p2026_q4)
  UPDATE INDEXES ONLINE;

-- MERGE: merge two adjacent partitions
ALTER TABLE customer_app.sale_part
  MERGE PARTITIONS p2026_q3, p2026_q4 INTO PARTITION p2026_h2
  UPDATE INDEXES ONLINE;

-- ADD: new partition at the end (when there is no MAXVALUE)
ALTER TABLE customer_app.sale_part
  ADD PARTITION p2027 VALUES LESS THAN (DATE '2028-01-01');

-- Check: partition bounds and UNUSABLE index partitions
SELECT partition_name, partition_position, high_value, num_rows
FROM   dba_tab_partitions
WHERE  table_owner = 'CUSTOMER_APP' AND table_name = 'SALE_PART'
ORDER  BY partition_position;

SELECT index_name, partition_name, status
FROM   dba_ind_partitions
WHERE  index_owner = 'CUSTOMER_APP' AND status <> 'USABLE';

作用

SPLIT 按边界值将一个分区拆分为两个(12c+:拆分为多个);MERGE 合并相邻分区。使用 ONLINE 时,操作期间 DML 可继续进行;使用 UPDATE INDEXES 时,本地索引和全局索引不会变为 UNUSABLE。

适用场景

用于拆分已变大的 MAXVALUE/"其他"分区、在归档前合并较小的旧分区,或改变分区方案(按月改为按季度)。

注意

需要 Partitioning 选件(EE 额外付费);ONLINE 需要 Enterprise Edition。SPLIT/MERGE 会物理重写数据:在大分区上很慢,并产生 redo/undo 和临时空间消耗。不使用 ONLINE 时,操作期间表会被锁定禁止 DML;不使用 UPDATE INDEXES 时,全局索引会变为 UNUSABLE。拆分空分区很快(fast split)。

在 DBAtlas 中打开 →

相关内容