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はパーティションを境界値で2つに(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 で開く →

関連項目