테이블 스페이스 용량 줄이는법 0 5 19,266

by 초보탈출 dbf [2014.02.11 16:40:01]



안녕하세요~

데이터가 하루에도 엄청 쌓이는 테이블이 있는데

그러다 보니 이 테이블 데이터 때문에 테이블 스페이스 용량도 나날이 늘어만 갑니다..물론 dbf파일이요;;

그래서 일정 주기가 지난 데이터는 삭제하고 인덱스 재생성, 통계정보 재생성 하는데도

dbf 파일 자체는 줄어들지 않네요,, 이게 HWM때문인가요?

데이터를 삭제하여 실제 물리적인 파일용량을 줄이려면 어떻게 해야 하는지 조언 부탁드립니다.

감사합니다.
by 비니 [2014.02.11 17:00:20]

alter로 테이블 스페이스 사이즈 조절 가능합니다. 헌데 말씀하신데로 HWM때문에 아마 줄이는건 거의 불가능 할거에요 .  줄일려면 테이블스페이스 따로 만드셔서 데이터 전체 복사하는 방법?? 그렇게 되면 reorg 되면서
복사된 곳 사이즈는 원래 차지하고 있는 용량으로 돌아갈듯 합니다만.
아니면 테이블만 이름 바꿔서 동일 테이블스페이스에 복사하고 기존테이블 지우고 rename 하는방식?

허나 이런 경우는 기타 다른 테이블과 연계(부모 자식관계같은)되어 있거나 하게 되면 역시 쉽지 않을듯...합니다만.  


by Oracler [2014.02.11 21:26:56]
alter tablespace로 테이블스페이스 줄이는건 temporary tablespace만 가능하다고 매뉴얼에 있네요~

by Oracler [2014.02.11 21:32:59]
테이블의 HWM를 줄이는 건
alter table 테이블명 enable row movement;
alter table 테이블명 shrink space cascade;
alter table 테이블명 disable row movement;
로 가능합니다.


그리고 datafile의 사이즈를 줄이는 건
alter database datafile '경로/파일명' size 크기;
로 가능합니다.

테이블의 공간을 회수하고 datafile의 사이즈를 줄이면 가능하지 않을까 싶네요.
제가 테스트해 보지는 않아서 장담할 수는 없습니다.^^

by 광식이 [2014.02.13 14:30:35]

Oracler님 resize 명령어가 오류가 있네요.

SQL> create tablespace test01 datafile '/data/oracle/oradata/test01.dbf' size 100M;

Tablespace created.

SQL> alter database datafile '/data/oracle/oradata/test01.dbf' resize 50M;

Database altered.


by 광식이 [2014.02.13 14:33:50]

그리고 참고로 shrink는 10g부터 생긴 신 기능이고, ASSM이 적용된 테이블스페이스만 지원됩니다.
온라인 리오그가 가능한 유용한 기능이긴 하나, 파티션 테이블을 대상으로 shrink할 때는 시간 엄청 잡아먹습니다.....
가장 깔끔한건 위에 말씀하신 대로 새로운 테이블스페이스에 table ~move로 차곡차곡 다시 짚어 넣는게 최고죠.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입