ORA-01452: 중복 키가 있습니다. 유일한 인덱스를 작성할 수 없습니다. (ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found)

ORA-01452: 중복 키가 있습니다. 유일한 인덱스를 작성할 수 없습니다. 오류는 오라클 데이터베이스에서 대상 컬럼 조합에 유니크 인덱스를 생성하려고 할 때에 발생합니다. 이 오류에서 말하는 중복 키는 키의 대상이 되는 컬럼 목록입니다.

ORA-01452: 중복 키가 있습니다. 유일한 인덱스를 작성할 수 없습니다. 원인

ORA-01452: 중복 키가 있습니다. 유일한 인덱스를 작성할 수 없습니다.

ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found 오류가 발생하는 예제 자료를 하나 소개해 드리겠습니다.

SELECT * FROM TABLE_NAME;

COLUMN_NAME          COLUMN_NAME_2        COLUMN_NAME_3
-------------------- -------------------- --------------------
1                    1                    2
1                    1                    9
1                    2                    3

해당 테이블은 상기와 같이 데이터가 있으며, 주목할 부분은 컬럼1과 컬럼2에 (1, 1) 데이터가 중복되어 있다는 것입니다.

ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found 해결하기

이때, 해당 테이블의 (COLUMN_NAME, COLUMN_NAME_2) 컬럼에 유니크 인덱스를 생성하면 어떻게 될까요?

CREATE UNIQUE INDEX PK
        ON TABLE_NAME (COLUMN_NAME, COLUMN_NAME_2);

ERROR at line 2:
ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found

중복키가 있기에 ORA-01452 예외가 발생하게 됩니다. 해당 오류를 수정하려면 중복키를 우선 정리하여야 합니다. 중복키를 조회하는 기본적인 방법은 해당 컬럼 조합 그룹에서 카운트가 1개를 초과하는 데이터를 조회해 보는 것입니다.

SELECT COLUMN_NAME, COLUMN_NAME_2, COUNT (*)
         FROM TABLE_NAME
     GROUP BY COLUMN_NAME, COLUMN_NAME_2
       HAVING COUNT (*) > 1;

COLUMN_NAME          COLUMN_NAME_2          COUNT(*)
-------------------- -------------------- ----------
1                    1                             2

해당 조건을 기초로 하여, 로우아이디라든지, 생성시간을 고려해본다든지 추가 조건으로 데이터를 정리해 주세요.

무결성 데이터 정리하기 관련 팁은 블로그 검색을 활용해 주세요!

댓글