A 라는 테이블에 rows 를 insert 하면서 존재하는 table을 update 합니다.
이 때 1달에 한번꼴로 ORA-0001 unique constraint violated 에러가 발생합니다. 에러 메시지는 UK_INDEX 를 위반했다고 나옵니다.
이 index 는 테이블 A의 Column B를 이용합니다. 다음과 같이 선언되어 있습니다.
CREATE UNIQUE INDEX "schema_name"."UK_INDEX" on "schema_name"."TABLE_NAME_A" ("COLUMN_B")
그리고 Column B 는 또 다른 index 에 포함되어 있습니다.
CREATE INDEX "schema_name"."UK_INDEX" on "schema_name"."TABLE_NAME_A" ("COLUMN_B", "COLUMN_C")
레거시 코드인데 왜 Unique Index 를 또 만들었는지 알 수가 없습니다.
혹시 index 를 이렇게 2개에서 Column B를 사용하고 이 칼럼이 unique index 에서 사용될 때는 table 을 update 할 때 business key 로 사용하면 안되는 것인지 궁금합니다.
테이블 A를 업데이트 하는 기준을 정해야 하는데 timing 문제인지 모르겠습니다.
매번 발생하는 것이 아닌 한달에 한번, 운이 나쁘면 물론 여러번 발생하기도 하는데 이 unique index 를 없애도 되는지 어떻게 결정할 수 있을까요?
만일 Unique Index 를 삭제하면 이 table 을 업데이트 하는 logic 도 수정해서 업데이트 할 때 key 를 Column B 가 아닌 다른 것을 사용하도록 수정하려 합니다.
의견 감사합니다.
insert 를 하다가 ORA-0001 이 발생하는 것을 보면 말씀하신대로 트랜잭션이 완료되지 않은 문제로 보입니다.
제 생각엔 이 업무에서 Column B 를 key 로 사용하면 안되고 Unique index를 삭제해야 맞을 듯 한데 큰 시스템의 먼지 같은 코드 한 조각이라 참 결정이 어렵네요.
거듭 의견 감사 드리며 제가 실수로 두번째 index 도 unique index 로 올려서 코드 라인에서 unique 를 제외하고 코드 라인을 수정했습니다.
그런데 실수를 하고 나서 든 의문인데 unique index 를 여러개 설정하면서 1개의 칼럼이 여기 저기 중복으로 들어갈 수 있는지 궁금합니다. 혹시 이렇게 사용할 수도 있는 것인가요? 잘 모르는 게 많아서 부끄럽습니다만 정중히 여쭤봅니다.