[Oracle] ORA-54033 오류해결방법, 컬럼 수정이 안될때

    Oracle 12c 에서 컬럼을 수정하였는데 아래 오류가 발생하였다.

     

    이유는 12c 이상에서는 extended statistics 기능을 위해, 사용자가 생성하지 않은 컬럼도 DB엔진이 virtual column으로 지정하고 별도 생성하여 관리한다는 것이다.

     

     

    컬럼수정 쿼리는 아래와 같다. 

    ALTER TABLE EDI_SCRAPING_MNG MODIFY( TYPE VARCHAR2(6) ); 

     

    테이블 EDI_SCRAPING_MNG의 컬럼 TYPE을 수정하려는데 에러가 발생했다. 그래서 이 테이블의 virtual column이 무엇인지 조회했다.

     

    virtual_column 조회쿼리

    SELECT OWNER, table_name, column_name, data_type, hidden_column, data_default
        FROM dba_tab_cols 
        WHERE OWNER='PDSADMIN' 
            AND TABLE_NAME='EDI_SCRAPING_MNG' 
            AND virtual_column = 'YES' ;
    cs

     

    아래 virtual_column = 'YES'를 해야  virtual_column 조회가 가능하다.

     

    테이블 조회했을때 DATA_DEFAULT 필드의 데이터에서 ()로 묶인 컬럼들이 virtual_column이다. 그래서 컬럼을 수정하려면이 컬럼들을 삭제 해야 한다.

     

    virtual_column 삭제쿼리

    EXEC dbms_stats.drop_extended_stats('PDSADMIN', 'EDI_SCRAPING_MNG', '("SCRAPDATE","TYPE")');

     

     

    EXEC 명령어는 프로시저 실행 명령어이다. 위에 PDSADMIN은 계정명, 뒤에 EDI_SCRAPING_MNG는 테이블명 그리고 뒤에 virtual column을 기입해주면 삭제가 된다.

     

    삭제를 하고

    ALTER TABLE EDI_SCRAPING_MNG MODIFY( TYPE VARCHAR2(6) );  명령어를 실행시켰더니 다시 잘되었다.

     

    그리고 다시 virtual column을 만들어줘서 원상복귀 시켜주도 되는데 디비가 필요하다고 판단하면 알아서 생성한다고 해서 그냥 내버려뒀다.

     

    참고: https://datacloud.tistory.com/17

     

     

    댓글

    Designed by JB FACTORY