Database/OracleDB

[OracleDB] ALTER TABLE ~ SET UNUSED의 사용

Razelo 2021. 9. 8. 19:24

5개월전에 데이터베이스를 공부하면서 같은 포스팅을 쓴 적이 있었는데 (바로 이전 포스트) , SET UNUSED가 왜 쓰이는지에 대한 글을 포스팅을 한 적이 있었다. 당시에 정확한 내용은 아니었고 어느 블로그의 댓글을 보고 답을 얻게 되었는데 요약하면 다음과 같았다. 

미리 마킹해두고 나중에 삭제하기 위해서 사용한다. 왜냐면 바로 삭제하면 별로 좋지 않기 때문이다. 

 

이렇게 알고 있었는데 좀더 정확한 내용을 알게 되었다. 내용은 아래와 같다. 

 

ALTER TABLE ~ SET UNUSED 

컬럼을 삭제하지는 않는다. 다만 논리적으로 사용을 제한할 뿐이다. 

특정 테이블의 컬럼을 바로 삭제하는 것은 위험하다. 왜냐면 여러 사용자가 이미 사용하고 있기 때문이다. (비즈니스단계에서)

또한 테이블에 저장된 내용이 많다면 삭제하는데 시간이 상당히 걸리는데 이때 이 테이블은 아예 사용이 불가능하다. 즉 락이 걸리게 된다. (비즈니스 단계라면 치명적이다.)

따라서 정리하자면 SET UNUSED 를 쓰면 해당 컬럼의 사용을 논리적으로 제한할 뿐이고 실제로는 삭제하지 않기 때문에 락이 걸릴 일도 없다. 

 

그리고 아주 중요한 사실이 있다. SET UNUSED는 한번 지정하면 복구가 불가능하다. 그러니 신중하게 선택하여 UNUSED로 마킹한 후에 서비스 이용이 낮은 시간대 (아마 새벽이 될 수 있겠다.) 그런 시간대에 DROP UNUSED COLUMNS를 통해서 한번에 마킹된 컬럼들을 싹다 삭제해주는 것이 맞겠다.

 

결론은 운용상의 이점때문이라고 볼 수 있겠다. 실제 운용중이라면 뭐든 조심스러운게 좋으니까 말이다. 

 

 

반응형