행위

테이블스페이스 용량 줄이기

DB CAFE

thumb_up 추천메뉴 바로가기


1 테이블스페이스 용량 줄이기[편집]

1.1 LOB 컬럼이 있는 테이블의 테이블스페이스 용량줄이기[편집]

  1. 테이블 데이타를 삭제해도 테이블 스페이스가 줄지않음.
  2. 새로운 테이블 스페이스를 만들고 lob데이타를 새로만든 테이블 스페이스로 이동

1.1.1 예시[편집]

  1. 새로운테이블스페이스를 만든다.
create tablespace 새테이블스페이스 ~ ..
  1. 해당테이블의 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'
 를 실행하여 인덱스 리빌드 구문을 구한 후 실행시킨다.