1. 현상
- DB12c 이상에서, 특정 Column 에 대한 rename column 혹은 drop column 시, ORA-54032 와 함께 변경이 안됨
SQL> alter table OWNER.AG_NB_RD_SBAS_DD_SUM rename column MRD_STAT_CD to REP_POL_STAT_CD ; 수행 시,, 아래 Message 를 출력 "ORA-54032: column to be renamed is used in a virtual column expression" "ORA-54033: column to be modified is used in a virtual column expression" |
2. 원인
- 해당 컬럼이 virtual column 에 포함되어 있어서 변경이 안됨
- DB12c 이상 에서는, extended statistics 기능을 위해, 사용자가 생성하지 않은 컬럼도 DB 엔진이 virtual column 으로 지정해 별도 생성, 관리
- extended statistics 에 대해서 기술된 내용 : This feature enables to Oracle calculate statistics on a group of columns. It uses this information to improve row estimates. This is useful when there's a correlation between the values of two (or more) columns in a table.
- SYS_OP_COMBINED_HASH 은 an undocumented feature 라고 합니다. The name implies Oracle is merging the arguments together to form a hash 라고 기술되어 있습니다.
- 확인 방법
SQL> select OWNER, table_name, column_name, data_type, hidden_column, data_default from dba_tab_cols where table_name ='해당_TABLE_NAME' and virtual_column = 'YES' ; |
# data_default 에 해당 column 이 포함되어 있다면, ORA-54032, ORA-54033 와 함께 변경이 안됨
- 확인 결과 (셈풀)
COLUMN_NAME DATA_DEFAULT HIDDEN_COLUMN ------------------------------ -------------------------------------- --------------------- SYS_STUYPW88OE302TFVBNC6$MMQXE SYS_OP_COMBINED_HASH("X","Y") YES Z NO Y NO X NO |
# 위와 같이 조회 되는 경우, X 와 Y 의 2개 Column 은 SYS_OP_COMBINED_HASH 에 속한 virtual column 이 됩니다.
3. 조치방법
3-A. 해당 extended statistics 컬러을 삭제
- 아래 Package 를 통해 삭제 가능
SQL> exec dbms_stats.drop_extended_stats( ownname => 'OWNER', tabname => '해당_TABLE_NAME', extension => '("BASE_YM","MRD_STAT_CD","MRD_PROD_CD")' ) ; |
혹은
SQL> exec dbms_stats.drop_extended_stats(OWNER, '해당_TABLE_NAME', '(BASE_YM, MRD_STAT_CD, MRD_PROD_CD)'); |
- 아래 Package 를 통해 생성 가능 (필요하다고 판단할 경우, DB 가 다시 생성)
SQL> exec dbms_stats.create_extended_stats( ownname => 'OWNER', tabname => '해당_TABLE_NAME', extension => '("BASE_YM","MRD_STAT_CD","MRD_PROD_CD")' ) ; |
3-B. 해당 Table 을 재생성 : 재생성 데 따른 제약은 없습니다.
SQL> alter table OWNER.AG_NB_RD_SBAS_DD_SUM drop primary key cascade ; SQL> drop table OWNER.AG_NB_RD_SBAS_DD_SUM cascade constraints ;
SQL> create table OWNER.AG_NB_RD_SBAS_DD_SUM ( ------ 생략 ) ; |
ps. 이 내용은 다음 URL을 참조하였습니다 : https://blogs.oracle.com/sql/entry/ora_54033_and_the_hidden
'IT-Tech > Database' 카테고리의 다른 글
[OracleDB] DB 11gR2 에서 LOG_ARCHIVE_DEST 을 LOG_ARCHIVE_DEST_1 로 변경 (0) | 2016.08.16 |
---|---|
[OracleDB] DB 11gR2 Silent Mode Install Script on Linux x86-64 (0) | 2016.08.16 |
[OracleDB] 접속, 연결이 되다가 종료되는 경우(ORA-03113 혹은 connect close) 확인, 조치사항 (1) | 2016.08.09 |
[OracleDB] Datapump 를 이용한 DB 간 Schema 단위 이관 (0) | 2016.07.20 |
[OracleDB] 공통 변환함수 to_char, to_date, to_number (0) | 2012.05.03 |