DBAtlas · データベース運用アトラス

インターバルパーティション化を作成し、既存のレンジ表をインターバルに変換

Oracleパーティション化

コマンド

-- New table: a partition is created automatically for each month
CREATE TABLE customer_app.measurements (
  ts        DATE   NOT NULL,
  sensor_id NUMBER,
  value     NUMBER)
PARTITION BY RANGE (ts) INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
( PARTITION p_first VALUES LESS THAN (DATE '2026-01-01') );

-- Convert an existing range table to interval (there must be no MAXVALUE partition):
ALTER TABLE customer_app.sale_part SET INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'));
-- Back to range: ALTER TABLE customer_app.sale_part SET INTERVAL ();

-- Rename a system-named partition to a meaningful name:
ALTER TABLE customer_app.measurements RENAME PARTITION FOR (DATE '2026-03-15') TO p2026_03;

-- Check:
SELECT partition_name, partition_position, interval, high_value
FROM   dba_tab_partitions
WHERE  table_owner = 'CUSTOMER_APP' AND table_name = 'MEASUREMENTS'
ORDER  BY partition_position;

SELECT table_name, partitioning_type, interval
FROM   dba_part_tables
WHERE  owner = 'CUSTOMER_APP';

概要

インターバルパーティション化は、最後の境界を超える最初の行が到着すると新しいパーティションを自動的に作成し、翌月のパーティション作成忘れによるORA-14400エラーをなくす。SET INTERVALはデータを移動せずに既存のレンジ表を変換する。

使用する場面

時系列、ログ、注文など日付で増加する表に。パーティションメンテナンススクリプトの削減に。

注意

Partitioningオプション(EEの有償オプション)が必要。パーティションキーは単一のNUMBER/DATE/TIMESTAMP列である必要があり、MAXVALUEパーティションは先に削除する必要がある。不正または極端な日付(例: 9999年)は遠い先のパーティションを作成し、パーティション番号付けを歪める。狭い間隔では1,048,575パーティションの上限(ORA-14300)に近づく可能性があるため、アプリケーションで日付を検証する。自動パーティションは表のデフォルト表領域に作成される(STORE INで指定する)。

DBAtlas で開く →

関連項目