ORA-01450: 키의 최대 길이(6398)를 초과했습니다 오류는 오라클 데이터베이스에서 인덱스(특히 유니크 제약조건 또는 PK 제약조건) 를 생성할 때, 해당 인덱스의 키 값의 길이 총합이 허용 범위(6398 바이트)를 초과했을 때 발생합니다.
🔍 ORA-01450 원인?
- VARCHAR2 컬럼에 인덱스를 생성하려고 할 때, 해당 컬럼(또는 컬럼들의 조합)이 너무 길어서 인덱스 키 길이 제한을 초과하는 경우
- 멀티바이트 문자셋 (예: AL32UTF8) 을 사용할 경우, 문자당 최대 4바이트를 차지할 수 있어 실제 인덱스 크기가 빠르게 커지는 경우
- 복합 인덱스 또는 복합 PK/UK 제약조건에서 여러 문자열 컬럼을 묶었을 경우 자주 발생.
✅ 해결 방법
1. 문자 길이를 줄이기
- 인덱스를 생성하려는 컬럼의 VARCHAR2 길이를 줄이기.
ALTER TABLE your_table MODIFY your_column VARCHAR2(100);
2. 인덱스 컬럼 수 줄이기
- 복합 인덱스 또는 PK 제약조건에서 너무 많은 컬럼을 포함하고 있는지 확인하고, 필요 없는 컬럼은 제외합니다.
3. 인덱스를 함수 기반 인덱스로 대체하기 (추천하지 않음)
- 일부 상황에서는 전체 컬럼이 아니라 앞부분만 인덱스에 포함되도록 할 수 있습니다.
CREATE INDEX idx_short ON your_table (SUBSTR(your_column, 1, 100));
📌 예시 문제 상황
CREATE TABLE table_name (
column_name_1 VARCHAR2(4000),
column_name_2 VARCHAR2(4000),
CONSTRAINT pk_name PRIMARY KEY (column_name_1, column_name_2)
);
이 경우 PK의 길이가 최대 길이(6398)를 초과하여 오류 발생.
해결
-- 문자열 길이를 줄이거나
ALTER TABLE table_name MODIFY column_name_1 VARCHAR2(500);
ALTER TABLE table_name MODIFY column_name_2 VARCHAR2(500);
-- 또는 앞부분만 인덱싱
CREATE INDEX idx_test ON test (SUBSTR(col1,1,100), SUBSTR(col2,1,100));
