ORA-14400: inserted partition key does not map to any partition

 


🧠 오류 메시지 해석

ORA-14400: inserted partition key does not map to any partition



이 메시지는 파티션 테이블에 데이터를 INSERT할 때, 해당 데이터가 어떤 파티션에도 속하지 않을 경우 발생합니다.

✅ 즉, Oracle이 "이 데이터 어디다 넣어야 할지 모르겠어!" 라고 말하는 것과 같습니다.


🏗️ 오류 재현 예제

다음은 sale_date를 기준으로 RANGE 파티션을 나눈 테이블입니다

CREATE TABLE sales (
  sale_id   NUMBER,
  sale_date DATE
)
PARTITION BY RANGE (sale_date) (
  PARTITION p_2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD')),
  PARTITION p_2025 VALUES LESS THAN (TO_DATE('2026-01-01', 'YYYY-MM-DD'))
);



이제, 아래 INSERT 문을 실행한다고 해보겠습니다

INSERT INTO sales VALUES (1, TO_DATE('2026-12-01', 'YYYY-MM-DD'));


🔻 결과는?

ORA-14400: inserted partition key does not map to any partition


🙅‍♂️ 왜? 2026-12-01은 현재 정의된 파티션의 범위(2026-01-01 미만)보다 크기 때문입니다.



🛠️ 해결 방법

✅ 1. 누락된 파티션 추가하기

필요한 파티션이 없다면 추가해 주세요

ALTER TABLE sales
ADD PARTITION p_2026 VALUES LESS THAN (TO_DATE('2027-01-01', 'YYYY-MM-DD'));


이제 동일한 INSERT는 정상 동작합니다.


✅ 2. MAXVALUE 파티션으로 대비책 마련

미래 데이터를 수용하려면 MAXVALUE 파티션을 추가해 놓는 것도 좋은 전략입니다

ALTER TABLE sales
ADD PARTITION p_max VALUES LESS THAN (MAXVALUE);

🔒 이 파티션은 일종의 "catch-all" 역할을 해주기 때문에 예외를 방지할 수 있습니다.


✅ 3. INTERVAL 파티션으로 자동 생성

Oracle 11g 이상에서는 INTERVAL 파티션 기능으로 이런 문제를 자동으로 회피할 수 있습니다


CREATE TABLE sales (
  sale_id   NUMBER,
  sale_date DATE
)
PARTITION BY RANGE (sale_date)
INTERVAL (NUMTODSINTERVAL(1, 'MONTH')) (
  PARTITION p_start VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD'))
);


이렇게 하면, 새로운 날짜 값이 들어올 때 Oracle이 자동으로 파티션을 생성합니다.


✅ 4. INSERT 전에 유효성 검사

INSERT 전에 파티션 범위에 맞는지 체크하는 로직도 추가할 수 있습니다.

예:

SELECT sale_date
FROM dual
WHERE TO_DATE(:sale_date, 'YYYY-MM-DD') < (SELECT MAX(high_value_date) FROM partition_metadata);

※ partition_metadata는 별도로 관리해야 합니다)


🚨 주의할 점


체크 항목설명
MAXVALUE 파티션 유무항상 정의해두는 것을 권장
앱 로직에 파티션 의존ROWID나 파티션명을 직접 참조하는 경우 매우 위험
파티션 추가 시 인덱스 상태 확인파티션 인덱스가 usable 상태인지 확인 필요

📌 마무리 정리

원인해결책
INSERT 값이 어떤 파티션에도 안 맞음파티션 추가 또는 MAXVALUE
LIST 파티션에서 미정의 값 삽입LIST에 값 추가 또는 DEFAULT 파티션
날짜 범위 누락INTERVAL 파티션 고려


✅ 실무 팁

  • 파티션 전략은 단순할수록 유지보수가 쉽습니다.
  • MAXVALUE 파티션은 반드시 포함하세요.
  • 테스트 환경에서 DDL을 자동화해 신규 파티션을 주기적으로 생성하는 것도 좋은 방법입니다.


다음 이전