Unique Index 삭제 여부 결정 0 2 2,145

by 배움 [Oracle 기초] database index [2023.10.20 07:19:45]


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 가 아닌 다른 것을 사용하도록 수정하려 합니다.

 

 

by 제로벅 [2023.10.20 13:57:22]

선행된 트랜잭션이 완료되지 않은 상태에서 후행 트랜잭션이 update를 하려고 하기 때문에 발생하는 문제라고 생각이 됩니다. 

unique index 가 필요하지 않으면 제거해도 되겠지만, 업무상 의미가 있다면 후행 트랜잭션의 오류를 무시하거나 발생되지 않도록 하는 게 좋을 것으로 보입니다.


by 배움 [2023.10.20 23:00:57]

의견 감사합니다.

insert 를 하다가 ORA-0001 이 발생하는 것을 보면 말씀하신대로 트랜잭션이 완료되지 않은 문제로 보입니다.

제 생각엔 이 업무에서 Column B 를 key 로 사용하면 안되고 Unique index를 삭제해야 맞을 듯 한데 큰 시스템의 먼지 같은 코드 한 조각이라 참 결정이 어렵네요.

거듭 의견 감사 드리며 제가 실수로 두번째 index 도 unique index 로 올려서 코드 라인에서 unique 를 제외하고 코드 라인을 수정했습니다.

그런데 실수를 하고 나서 든 의문인데 unique index 를 여러개 설정하면서 1개의 칼럼이 여기 저기 중복으로 들어갈 수 있는지 궁금합니다. 혹시 이렇게 사용할 수도 있는 것인가요? 잘 모르는 게 많아서 부끄럽습니다만 정중히 여쭤봅니다.

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입