기간이 오래 된 백업테이블이 사이즈가 너무 방대해져서..
alter table 테이블 drop column 을 이용해서 필요없는 컬럼을 삭제 하였습니다.
130개정도의 컬럼이 70개 정도로 줄였습니다..
줄인이후에 DBCC SHRINKFILE을 이용해서 더이상 줄여지지 않을 때까지 줄였습니다
(ndf파일, THIRD에 존재)
근데..
1. sp_spaceused 테이블,,
2. select
table_name = convert(varchar(30), min(o.name))
, table_size = convert(int, ltrim(str(sum(reserved) * 8.192 / 1024., 15, 0))), UNIT = 'MB'
from sysindexes i
inner join sysobjects o on (o.id = i.id)
where i.indid in (0, 1, 255)
and o.xtype = 'U'
group by i.id
order by 2 desc
위 2개의 쿼리로 테이블의 사이즈가 얼마나 줄어들었는지 확인을 해보니,,
테이블의 사이즈가 줄어 들지가 않네요..
DBCC SHRINKFILE는 NOTRUNCATE, TRUNCATEONLY 옵션으로 끝까지 다 줄였는데도 말이죠..
컬럼을 제거하고 SHRINKFILE을 실행해도 테이블의 사이즈가 줄지 않는게 정상인지,,
제가 이해를 잘못하고 있는건지..
클러스터형 인덱스를 재빌드 해야하는건지..
도와주세요~
데이터가 페이지에 처음기록될 때 처음부터 끝까지 쓰는데, 컬럼을 삭제하면 구멍이 뚫리게 되지요,,
이 공간은 shrink를 이용해서 줄일 수 없는 것으로 알고 있습니다,,,
방법으로는 데이터를 다시 기록하는 것 입니다,,,
백단에서 한줄씩 읽어서 지우고 쓰기를 하던지, 1000개씩 템프에 넣고 읽은거 지우고 다시 넣든지 하는 작업을 통해서 구멍을 메꾸는 작업이 필요합니다,,
그러면 용량이 줄어들껍니다,,