TABLE, INDEX, CLUSTER등의 DATABASE OBJECT들은 입력되는 자료의 양이 증가함에 따라서 새로운 EXTENT들이 자동적으로 할당된다. 이 때 필요 이상 과도한 크기의 EXTENT가 할당되면 실제로 자료가 들어있지 않거나 들어갈 예정이 없는 죽은 공간이 생길 수 있게 된다.
이러한 죽은 공간은 DISK 전체의 사용 효율을 저하시키는 원인이 되므로 적절히 제거되어야 하는데 그 중에서 DEALLOCATE라는 방법이 있습니다.
(DEALLOCATE 는 ORACLE 7.3부터 사용 가능하다.)
1. DEALLOCATE의 대상이 되는 공간이 어느 정도 존재하는지 파악하는 방법
ANALYZE TABLE table_name COMPUTE STATISTICS ;
예1)
SELECT EMPTY_BLOCKS, BLOCKS
FROM DBA_TABLES
WHERE TABLE_NAME = 'table_name' ;
EMPTY_BLOCKS BLOCKS
------------ --------
6530 2400
EMPTY_BLOCKS - OBJECT에 할당된 총 SPACE중 HIGH WATER MARK 위의 공간
BLOCKS - OBJECT에 할당된 총 SPACE중 HIGH WATER MARK 아래 공간
여기서 EMPTY_BLOCKS + BLOCKS(해당 OBJECT의 총 SPACE)에 비해서
EMPTY_BLOCKS 이 과도하게 크고 앞으로 더 이상의 DATA INSERT도 일어나지
않을 계획이라면 DEALLOCATE를 하는 것이 좋다.
2. SYNTAX
ALTER TABLE table_name DEALLOCATE UNUSED [KEEP integerK] ;
ALTER INDEX index_name DEALLOCATE UNUSED [KEEP integerK] ;
ALTER CLUSTER cluster_name DEALLOCATE UNUSED [KEEP integerK] ;
KEEP 절을 사용하면 KEEP 절에 정의된 크기 만큼은 남겨 두고 DEALLOCATE를
한다.
>>compact 님께서 쓰시길<<
:: 안녕하세여? *^^*
::
:: 윈도우에서..디스크 조각모으기던가..해서 디스크 정리를 해주는 프로그램이 있쟎아요?
::
:: DB에서도 테이블을 delete해도 불필요한 공간이 남는 것으로 알고 있는데요, 이러한 공간들을 정리해
:: 주는 방법이 있나요?
::
:: 알려주시면 감사하겠습니다~~ !! *^^*
|