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

interval 파티셔닝 생성 및 기존 range 테이블을 interval로 전환

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';

하는 일

interval 파티셔닝은 마지막 경계를 넘는 첫 행이 들어오면 새 파티션을 자동으로 생성하여 다음 달 파티션을 잊어 생기는 ORA-14400 오류를 없앤다. SET INTERVAL은 데이터를 옮기지 않고 기존 range 테이블을 전환한다.

사용 시점

시계열, 로그, 주문처럼 날짜 기준으로 커지는 테이블, 파티션 유지보수 스크립트를 줄이기 위해.

주의

Partitioning 옵션(유료 EE)이 필요하다. 파티션 키는 단일 NUMBER/DATE/TIMESTAMP 컬럼이어야 하며 MAXVALUE 파티션은 먼저 제거해야 한다. 잘못되었거나 극단적인 날짜(예: 9999년)는 먼 미래의 파티션을 열어 파티션 번호 체계를 왜곡한다. 간격이 좁으면 1,048,575개 파티션 한도(ORA-14300)에 근접할 수 있으므로 애플리케이션에서 날짜를 검증한다. 자동 파티션은 테이블의 기본 테이블스페이스에 생성된다(STORE IN으로 지정).

DBAtlas에서 열기 →

관련 항목