본문 바로가기
IT/ORACLE

오라클 테이블 용량 축소(SEGMENT SHRINK) 사용법 & 예제

by 베베야 2021. 3. 8.
728x90

오라클(ORACLE) 테이블 스페이스 용량을 줄이기 위해서 데이터베이스 테이블의 데이터를 delete문을 통해 삭제하였습니다. 이후 테이블 스페이스 용량을 확인해보니 용량이 줄어들지 않았는데 이유가 무엇일까?

오늘은 오라클 10g 이상부터 지원하는 테이블의 빈 공간을 축소하는 "SEGMENT SHRINK"에 대해서 알아보겠습니다.

 

 

오라클 테이블 빈 공간이 생기는 이유는?

테이블의 빈 공간이 생기는 이유는 반복적이고 누적된 테이블 delete 연산의 결과로 일어나며 이 공간을 방치하게 되면 아래와 같은 문제가 생길 수 있습니다.

 

- 빈 공간 때문에 데이터가 흩어져 있기 때문에 해당 테이블을 스캔 시 보다 많은 I/O가 필요합니다. 

- 내부 단편화로 인한 row-chaining/row migration이 발생할 수 있습니다.

- 서버의 전체적인 공간을 많이 차지하여 공간 낭비가 발생합니다

 

 

오라클 테이블 용량 줄이기(SEGMENT SHRINK)

SHRINK 사용조건

1. ORACLE 10g 이상 사용가능

 

2. ASSM(Automatic Segment Space Management) 사용하는 테이블스페이스만 가능

1) 조회하는 방법입니다.

select tablespace_name, segment_space_management from user_tablespaces;

(segment_space_management = AUTO 일 경우 가능)

 

3. row movement= enable 

1)조회하는 방법입니다.

select table_name, ROW_MOVEMENT from dba_tables where table_name ='[table명]';

 

2) ROW MOVEMENT 활성화/비활성화

ALTER TABLE [table명] ENABLE ROW MOVEMENT; --활설화

ALTER TABLE [table명] DISABLE ROW MOVEMENT; --비활성화

 

SHRINK 명령어

alter table [table_name] shrink space cascade;

cascade 옵션 : segment shrink는 dependent 한 오브젝트들에 대해서도 자동으로 수행됩니다.

예를 들면 테이블을 shrink 하면서, 그 테이블에 대해 정의된 인덱스들 또한 자동으로 동시에 shrink 할 수 있습니다.

 

만약 ORA-10631 오류 발생 시 다음의 포스팅을 참조하세요

 

ORA-10631 shrink clause should not be specified for this object

오늘은 오라클에서 테이블 축소 작업 시 발생하는 ORA-10631 오류의 원인과 해결방법에 대해서 알아보겠습니다. ORA-10631 발생 원인 데이터베이스의 테이블에 세그먼트 쉬링크(Segment Shrink) 

bebeya.tistory.com

 

 

SHRINK 테스트 결과

SHRINK 테스트는 아래의 2가지 경우로 진행하였습니다.

- 테이블 delet 전 shrink 실행

- 테이블 delet(모든 데이터) 후 shrink 실행

 

기존 테이블스페이스 상태

오라클 빈 공간 축소 전의 테이블 스페이스 용량을 확인 할 수 있는 이미지 입니다.
오라클 테이블 스페이스 상태 작업 전

 

테이블 delet 전 shrink 실행한 결과값 입니다.

기존에 테이블에 존재하던 빈 공간을 모아 Free Size가 증가한 상태입니다.

오라클 빈 공간 축소를 진행한 이미지 입니다.
오라클 테이블 스페이스 상태 작업 후

 

 

테이블 delet(모든 데이터) 후 shrink 실행한 결과 값입니다.

delet 하고 생긴 빈 공간을 모아 Free Size가 확보된 모습입니다.

오라클 테이블의 모든 데이터를 삭제하고 빈 공간 축소를 진행한 이미지 입니다..
오라클 테이블 스페이스 용량 확보 상태 데이터 삭제 후

해당 쿼리에대한 프로시저가 필요하신분은 다음 글을 참조해 주시기 바랍니다.

 

오라클(Oracle) 테이블 스페이스 용량 축소 & 프로시저 생성

오늘은 오라클(ORACLE) 데이터베이스의 테이블스페이스 용량을 줄이는 방법에 대해서 알아보고 프로시저 만드는 방법도 알겠습니다. 테이블스페이스 용량을 축소한다고 하였지만 해당 테이블스

bebeya.tistory.com

 

이상으로 오라클(ORACLE) 테이블 스페이스 용량 줄이는 방법에 대한 포스팅을 마치겠습니다.

반응형
그리드형

댓글