DATA 전문가로 가는 길

[Admin] ORA-30556 함수 기반 인덱스, 컬럼(타입) 사이즈 변경 에러 본문

Data Architecture/Admin

[Admin] ORA-30556 함수 기반 인덱스, 컬럼(타입) 사이즈 변경 에러

EstenPark 2019. 9. 20. 13:00

오라클 문법중에서 컬럼 사이즈 변경 할 때 "ALTER TABLE 테이블명  MODIFY (컬럼명 VARCHAR2(128))" 명령어로 변경 하게 됩니다. 일반적인 상황에서는 문제 없이 변경이 가능 하지만, 함수 기반 인덱스로 활용된 경우에는 아래와 같은 에러가 발생 합니다.

 

1. ORA Error

  - EST_TABLE 테이블의 EST_TABLE_IDX02는 함수기반 인덱스는 "LOWER("USER_NM")"으로 되어있어서 일반적인 컬럼 속성 변경할 때 문제가 발생 할 수 있습니다. 에러는 아래를 참고 바랍니다.

/* SQL 쿼리 수행 */
ALTER TABLE EST_TABLE MODIFY USER_NM VARCHAR2(128);
/* SQL 쿼리 수행 후 에러 메시지 */
  -- ORA-30556: either functional or bitmap join index is defined on the column to be modified 

 

2. 해결 방법

/* 에러가 발생한 함수 기반 인덱스를 제거 합니다. */
DROP INDEX EST_TABLE_IDX02;

/* EST_TABLE 테이블에서 USER_NM 컬럼 사이즈를 128 Byte로 변경 합니다. */
ALTER TABLE EST_TABLE MODIFY USER_NM VARCHAR2(128);

/* EST_TABLE 테이블 함수 기반 인덱스 추가 합니다. */
CREATE INDEX EST_TABLE_IDX02
 ON  EST_TABLE (
  LOWER("USER_NM") ASC
 )
 NOLOGGING
 TABLESPACE  EST_INDEX
;

 

3. 결론

결론은 함수기반 컬럼은 내장 함수, 직접 작성된 함수 모두 사용해서 인덱스를 만들었다면 컬럼 속성을 변경 할 때 인덱스를 제외 하고, 컬럼 속성을 변경하고, 다시 원래 인덱스를 생성해줘야 합니다.

Comments