본문 바로가기
Oracle(DB관련)

oracle 10g 디스크 용량 줄이기 shrink

by xfree302 2011. 12. 27.
반응형

기존에는 테이블을 다시 작성해서 크기를 줄일 수 있었다.
10g 부터는 shrink 기능이 있다..
shrink으로 HWM를 줄일 수 있고, 결국 파일크기도 줄일 수 있다.

1. 현재 임계치(Threshold) 값 확인
 
select warning_value, critical_value
from dba_thresholds
where metrics_name='Tablespace Space Usage'
and object_name is null;
 
2. 임계치 경고 메시지 확인
 
select reason, message_level
from dba_outstanding_alerts
where object_name='TBSALERT';
 
3. 블럭수, HWM를 확인
 
- 실제 사용중인 블럭 수
select count(distinct dbms_rowid.rowid_block_number(rowid)) blocks
from TABLE명;

-HWM 블럭수
select blocks, extents
from user_segments where segment_name='TABLE명';
 
 
4. 낭비되고 있는 영역 조각모음하기.

-row id가 바뀔수 있기에 행이주를 허용한다.
alter table 테이블명 ENABLE ROW MOVEMENT;
alter table 테이블명 ENABLE DISABLE ROW MOVEMENT;

-사용중인 블럭만 정리(HWM 안됨) 
alter table TABLE명 shrink space compact;

-사용중인 블럭과 HWM 정리
alter table TABLE명 shrink space;
 
 
5. 3번 조회로 블럭수 비교..

--- 주의점 ---------------
사용하기 위한 전제
- 테이블 영역이 로컬 관리 테이블 영역, 자동 세그먼트(segment) 영역 관리인 것
- LONG 열을 포함하지 않는 것
- 클러스터화 테이블이 아닌 것
- 압축테이블이 아닌 것

세그먼트(segment)의 축소를 할 수 없는 케이스
- 펑션 색인, 비트 맵 결합 색인을 사용하고 있는 장소
- ON COMMIT 마테리아라이즈드·뷰의 마스터 테이블의 경우

그외
- ROWID 가 변경되기 위해 ROWID 마테리아라이즈드·뷰는 재구축 하지 않으면 정합성이 맞지 않게 된다.

참고 : http://gmos.springnote.com/pages/3502217

 

----------------------------------------------------------------------------------

select * from table(dbms_space.asa_recommendations());

 

shrink 가능여부 확인

SELECT dt.owner,
       dt.table_name,
       (CASE WHEN NVL(ind.cnt, 0) < 1 THEN 'Y' ELSE 'N' END) AS shinkable
  FROM dba_tables dt,
       (SELECT table_name, COUNT(*) cnt
          FROM dba_indexes di
         WHERE index_type LIKE 'FUNCTION-BASED%'
         GROUP BY table_name) ind
 WHERE dt.table_name = ind.table_name(+)
   AND dt.table_name NOT LIKE 'AQ$%'
   AND dt.table_name NOT LIKE 'BIN$%'
   AND dt.owner = 'SCOTT'
 ORDER BY 1, 2;

 

 


참고 : http://ukja.tistory.com/89

참고 : http://blog.naver.com/ddungddu99?Redirect=Log&logNo=80193771393



 

반응형