업무 중 테이블에 대한 컬럼 드랍 요청이 있어서 작업을 하려고 하니 다음과 같은 오류가 발생하였다.

ORA-39726: unsupported add/drop column operation on compressed tables

Compress된 테이블은 컬럼 추가/삭제가 지원되지 않는다면 말이다. ALTER로 테이블을 NOCOMPRESS로 변경하여도 신규로 들어가는 데이터에 대해서만 적용되지 기존의 압축된 데이터는 그대로이기 때문에 해결책이 되지 않는다.

이럴 경우 해당 테이블의 테이블 스페이스를 다른 곳으로 이동하면서 NOCOMPRESS 옵션을 사용하면 COMPRESS 설정이 풀리게 된다. 만약 파티션의 경우도 마찬가지로 파티션이 위치하는 테이블 스페이스를 다른 곳으로 이동하면 된다. 이후 DDL 작업이 완료된 후 다시 원래의 테이블 스페이스로 COMPRESS 옵션을 주어 원복하면 작업이 완료된다.

파티션된 테이블의 경우는 다음과 같은 방식으로 스크립트 생성이 가능하다.

select 'ALTER TABLE '
|| object_name
|| ' MOVE PARTITION '
|| subobject_name
|| ' TABLESPACE TS_NEW NOCOMPRESS PARALLEL 8 NOLOGGING;'
from user_objects
where object_type = 'TABLE PARTITION'
and object_name in(select tname
from tab)