2026년 09월 21일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-14074 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-14074 partition bound must collate higher than that of the last partition 는?
ORA-14074 에러는 파티션 테이블에 새로운 파티션을 추가(ADD PARTITION)하거나 파티션 경계값(Partition Bound)을 지정할 때, 새로 추가하려는 파티션의 경계값이 기존 마지막 파티션의 경계값보다 낮거나 같을 때 발생합니다. Oracle은 Range 파티션에서 파티션 경계값이 반드시 오름차순으로 정렬되어야 한다는 규칙을 강제하기 때문에 이 에러가 발생합니다. 주로 ALTER TABLE ... ADD PARTITION 구문을 사용하거나 파티션 테이블 생성(CREATE TABLE) 시 파티션 순서를 잘못 지정했을 때 실무에서 자주 마주치는 에러입니다.
주요 발생 원인
- ADD PARTITION 시 경계값이 기존 마지막 파티션보다 낮거나 같은 경우
가장 흔한 발생 원인입니다. Range 파티션 테이블에서 ALTER TABLE ... ADD PARTITION을 수행할 때, 새로 추가하는 파티션의 VALUES LESS THAN 값이 기존 테이블의 마지막 파티션 상한값(Upper Bound)과 같거나 작으면 ORA-14074가 발생합니다. 예를 들어 마지막 파티션이 VALUES LESS THAN (TO_DATE('2024-01-01','YYYY-MM-DD'))로 정의되어 있는데, 새 파티션을 VALUES LESS THAN (TO_DATE('2023-06-01','YYYY-MM-DD'))로 추가하려 하면 에러가 발생합니다.
- 파티션 테이블 생성 시 파티션 순서가 오름차순으로 정렬되지 않은 경우
CREATE TABLE 구문에서 파티션을 정의할 때 파티션 경계값이 오름차순이 아닌 경우에도 ORA-14074가 발생합니다. 예를 들어 2024년 파티션을 먼저 정의하고, 그 뒤에 2023년 파티션을 정의하는 경우 Oracle은 이를 허용하지 않습니다. 파티션 설계 단계에서 순서를 잘못 잡거나, 파티션 DDL 스크립트를 복사/붙여넣기하면서 순서가 섞이는 경우 발생합니다.
- MAXVALUE 파티션이 이미 존재하는 테이블에 파티션을 추가하는 경우
Range 파티션에서 VALUES LESS THAN (MAXVALUE) 파티션이 이미 존재하는 경우, 그 이후로는 어떠한 파티션도 추가할 수 없습니다. MAXVALUE는 논리적으로 무한대를 의미하기 때문에 그보다 큰 경계값은 존재하지 않으며, 이 상태에서 ADD PARTITION을 시도하면 ORA-14074가 발생합니다. 이 경우는 단순히 경계값 문제가 아니라 파티션 구조 자체의 제약에 해당합니다.
해결 방법
원인 1 해결: 올바른 경계값으로 파티션 추가
기존 마지막 파티션의 상한값을 먼저 확인한 후, 그보다 높은 값으로 파티션을 추가합니다.
-- 현재 파티션 경계값 확인
SELECT PARTITION_NAME, HIGH_VALUE
FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = 'SALES'
ORDER BY PARTITION_POSITION;
-- 잘못된 예 (ORA-14074 발생)
-- 마지막 파티션이 2024-01-01 인데 2023-06-01 로 추가 시도
ALTER TABLE SALES
ADD PARTITION P202306
VALUES LESS THAN (TO_DATE('2023-06-01', 'YYYY-MM-DD'));
-- 올바른 예 (마지막 파티션보다 높은 값 사용)
ALTER TABLE SALES
ADD PARTITION P202407
VALUES LESS THAN (TO_DATE('2024-07-01', 'YYYY-MM-DD'));
원인 2 해결: 파티션 생성 순서를 오름차순으로 정렬
테이블 생성 시 반드시 파티션 경계값이 오름차순이 되도록 정의합니다.
-- 잘못된 예 (ORA-14074 발생)
CREATE TABLE SALES (
SALE_ID NUMBER,
SALE_DATE DATE,
AMOUNT NUMBER
)
PARTITION BY RANGE (SALE_DATE) (
PARTITION P2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD')),
PARTITION P2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')), -- 순서 오류!
PARTITION P2022 VALUES LESS THAN (TO_DATE('2023-01-01', 'YYYY-MM-DD'))
);
-- 올바른 예 (오름차순 경계값)
CREATE TABLE SALES (
SALE_ID NUMBER,
SALE_DATE DATE,
AMOUNT NUMBER
)
PARTITION BY RANGE (SALE_DATE) (
PARTITION P2022 VALUES LESS THAN (TO_DATE('2023-01-01', 'YYYY-MM-DD')),
PARTITION P2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')),
PARTITION P2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD'))
);
원인 3 해결: MAXVALUE 파티션이 있는 경우 SPLIT PARTITION 사용
MAXVALUE 파티션이 이미 존재한다면 직접 ADD PARTITION 대신 SPLIT PARTITION을 사용해 기존 MAXVALUE 파티션을 분리합니다.
-- MAXVALUE 파티션 확인
SELECT PARTITION_NAME, HIGH_VALUE
FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = 'SALES'
ORDER BY PARTITION_POSITION;
-- MAXVALUE 파티션(P_MAX)을 분리하여 새 파티션 추가
ALTER TABLE SALES
SPLIT PARTITION P_MAX
AT (TO_DATE('2024-07-01', 'YYYY-MM-DD'))
INTO (
PARTITION P202407,
PARTITION P_MAX -- MAXVALUE 파티션 유지
);
-- 분리 후 파티션 확인
SELECT PARTITION_NAME, HIGH_VALUE, PARTITION_POSITION
FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = 'SALES'
ORDER BY PARTITION_POSITION;
예방 방법
- 파티션 추가 전 반드시 현재 파티션 경계값을 조회하는 습관을 가질 것
파티션 관련 DDL 작업 전에 USER_TAB_PARTITIONS 또는 DBA_TAB_PARTITIONS 뷰를 통해 현재 파티션 구조와 경계값을 반드시 확인하는 것을 표준 절차(SOP)로 만들어야 합니다. 특히 배치 작업이나 자동화 스크립트를 통해 파티션을 추가하는 경우, 스크립트 내부에 파티션 경계값 검증 로직을 포함시켜 잘못된 경계값으로 실행되는 것을 사전에 방지해야 합니다. 아래와 같은 검증 쿼리를 파티션 추가 프로세스에 포함시키는 것을 권장합니다.
“`sql
— 파티션 추가 전 경계값 사전 검증 쿼리
SELECT PARTITION_NAME,
HIGH_VALUE,
PARTITION_POSITION
FROM DBA_TAB_PARTITIONS
WHERE TABLE_NAME = ‘SALES’
AND OWNER = ‘SCOTT’
ORDER BY PARTITION_POSITION DESC
FETCH FIRST 1 ROW ONLY;
“`
- MAXVALUE 파티션 사용을 신중하게 설계하고, 파티션 자동 관리 기능(Interval Partitioning) 도입 검토
실무에서 MAXVALUE 파티션을 남용하면 이후 파티션 추가 시 항상 SPLIT PARTITION을 사용해야 하는 불편함이 생깁니다. Oracle 11g 이상에서는 Interval Partitioning을 사용하면 지정한 간격으로 파티션이 자동 생성되므로 ORA-14074와 같은 파티션 경계값 에러를 근본적으로 예방할 수 있습니다.
“`sql
— Interval Partitioning 적용 예시 (월별 자동 파티션 생성)
CREATE TABLE SALES_INTERVAL (
SALE_ID NUMBER,
SALE_DATE DATE,
AMOUNT NUMBER
)
PARTITION BY RANGE (SALE_DATE)
INTERVAL (NUMTOYMINTERVAL(1, ‘MONTH’))
(
PARTITION P_INIT VALUES LESS THAN (TO_DATE(‘2024-01-01’, ‘YYYY-MM-DD’))
);
“`
관련 에러
- ORA-14019: 파티션 경계 요소가 파티션 키의 컬럼 개수보다 많을 때 발생하는 에러로, 파티션 경계값 설정 관련 에러군에 속합니다.
- ORA-14036: 파티션 경계값이 해당 컬럼의 데이터 타입과 일치하지 않을 때 발생하며, ORA-14074와 함께 파티션 DDL 작업 시 자주 혼동됩니다.
- ORA-14067: 중복된 파티션 이름을 사용할 때 발생하는 에러로, 파티션 추가 작업 시 함께 주의해야 합니다.
- ORA-14400: 삽입하려는 데이터가 어떤 파티션의 경계값에도 해당되지 않을 때 발생하는 에러로, 파티션 경계값 설계가 잘못되었을 때 DML 레벨에서 나타납니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.