테이블스페이스 용량 줄이기
DB CAFE
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
1 테이블스페이스 용량 줄이기[편집]
1.1 LOB 컬럼이 있는 테이블의 테이블스페이스 용량줄이기[편집]
- 테이블 데이타를 삭제해도 테이블 스페이스가 줄지않음.
- 새로운 테이블 스페이스를 만들고 lob데이타를 새로만든 테이블 스페이스로 이동
1.1.1 예시[편집]
- 새로운테이블스페이스를 만든다.
create tablespace 새테이블스페이스 ~ ..
- 해당테이블의 lob 저장세그먼트를 새로만든 테이블 스페이스로 옮긴다.
ALTER TABLE 테이블명 MOVE LOB (lob칼럼명1,lob칼럼명2,..) STORE AS
( TABLESPACE 새테이블스페이스 ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10 NOCACHE STORAGE ( INITIAL 64 k MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT ) )
3)기존테이블 스페이스 삭제
drop tablespace 기존테이블스페이스 including contents;
4)운영체제에서 기존테이블스페이스를 차지하고 있는 물리적데이타파일을 삭제한다.
[결론]: lob컬럼은 데이타를 delete를 통해 삭제하더라도
테이블스페이스가 줄어 들지 않으므로
항상 테이블 생성 및 칼럼추가시 lob컬럼은 별도의 테이블스페이스로 저장할 수
있기때문에 그렇게 한다.
그리고 추후 대량의 데이타 삭제후 lob 테이블스페이스 사이즈를 줄이고 싶으면
위와 같이 새로운테이블스페이스를 만든후 lob컬럼의 스토리지를
새로만든테이블스페이스로 옮기고
기존 lob컬럼 테이블스페이스를 drop 한다.
p.s) 만일 lob칼럼 뿐만 아니라 테이블 전체 테이블 스페이스를 옮길려고 하면
alter table cone_mail_smtp move
-- lob컬럼 어디로 옮길지 명시 -- LOB (MAIL_CONTENTS) STORE AS
( TABLESPACE LOG_TBS04 ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10 NOCACHE STORAGE ( INITIAL 64K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT ) )
-- 일반데이타 어느테이블스페이스로 옮길지 명시--
alter table cone_mail_smtp move TABLESPACE LOG_TBS04;
※ 단, 관련인덱스는 모두 unuseable 되어 있으니 모두 rebuild 해줘야 한다.
ex) select 'alter index ' || index_name || ' rebuild;' from user_indexes where status ='UNUSABLE'
를 실행하여 인덱스 리빌드 구문을 구한 후 실행시킨다.