DBAtlas · 데이터베이스 운영 아틀라스

온라인으로 파티션 분할(split) 및 병합(merge)

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에서 열기 →

관련 항목