일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 오라클
- perl one-liner
- 연산자
- fdisk
- solaris
- SQL
- dba
- perl + 정규표현식
- perl string
- mariaDB
- oracle install
- patch
- rac
- MySQL
- Unix
- solaris network
- oracle
- PERL
- Linux
- RHEL4
- bash
- Network
- cygwin
- prompt
- memory
- Oracle RAC
- command & perl
- php5
- sqlplus
- grid
Archives
- Today
- Total
DATA 전문가로 가는 길
[Admin] ORA-30556 함수 기반 인덱스, 컬럼(타입) 사이즈 변경 에러 본문
오라클 문법중에서 컬럼 사이즈 변경 할 때 "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. 결론
결론은 함수기반 컬럼은 내장 함수, 직접 작성된 함수 모두 사용해서 인덱스를 만들었다면 컬럼 속성을 변경 할 때 인덱스를 제외 하고, 컬럼 속성을 변경하고, 다시 원래 인덱스를 생성해줘야 합니다.
'Data Architecture > Admin' 카테고리의 다른 글
[Admin] MySQL/MariaDB Primary Key vs Unique Key (0) | 2020.07.02 |
---|---|
[Admin] MySQL/MariaDB Clustered vs Non-Clustered Index (0) | 2020.07.01 |
[Admin] Oralce 파라미터 설정 자동 가이드(audit_trail, processes, archive log directory, _diag_daemon, memory_target) (1) | 2019.08.16 |
[Admin] MariaDB/MySQL Linux Filesystem Cache(unmap) 메모리 초기화 (0) | 2019.08.09 |
[Admin] MariaDB/MySQL InnoDB 테이블 압축(Compression) (0) | 2019.08.07 |
Comments