허접한 실력에 형편없는 개발자의 블로그

MDF 파일의 축소 방법에 대해 간단히 예제 올려봅니다 -_-;;

 

먼저 데이터베이스를 단독 사용자 모드로 변경한다.

ALTER DATABASE PRODUCT_DB SET SINGLE_USER WITH ROLLBACK IMMEDIATE

 

USE PRODUCT_DB

 

1. 데이터 파일의 할당 정보는 아래의 명령어로 사용할수 있다.

DBCC SHOWFILESTATS

 

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

Fileid      FileGroup   TotalExtents         UsedExtents          Name                        FileName

1          1                 1283379                 113056          PRODUCT_DB        M:\PRODUCT_DB.MDF

 

(1개행적용됨)

 

DBCC 실행이완료되었습니다. DBCC에서오류메시지를출력하면시스템관리자에게문의하십시오.

 

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

 

유명하신 라이고님의 블로그에서 1MB가 16 Extents 라는 설명을보고 계산을 하게 되었다

 

총 TotalExtents 1283379 / 16 = 80211 -> 80GB

현재 사용 UseExtents 113056 / 16 = 7066 -> 7GB

 

데이터파일 PRODUCT_DB.mdf  를 20GB로 축소하기 실제 TotalExtents 의 크기가 줄어든다 .

 

2. 데이터파일 축소

DBCC SHRINKFILE(PRODUCT_DB,20000)

 

파일 정보를 다시 확인해본다.

 

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

Fileid      FileGroup   TotalExtents         UsedExtents          Name                        FileName

1          1                 320000                 112932           PRODUCT_DB        M:\PRODUCT_DB.MDF

 

(1개행적용됨)

 

DBCC 실행이완료되었습니다. DBCC에서오류메시지를출력하면시스템관리자에게문의하십시오.

 

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

TotalExtents 가 320000으로 변경되었다.

320000 / 16 = 20000 -> 20GB

 

3.  NOTRUNCATE를 이용한 빈공간 정리

 

파일의 사용되지 않는 부분을 정리한다.

DBCC SHRINKFILE(PRODUCT_DB,NOTRUNCATE)

 

4.  TRUNCATEONLY를 이용한 데이터 파일 축소

 

DBCC SHRINKFILE(PRODUCT_DB , TRUNCATEONLY)

DBCC SHOWFILESTATS

 

파일의 사용되지 않는 부분이 모두 잘려나간다.

 

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

Fileid      FileGroup   TotalExtents         UsedExtents          Name                        FileName

1          1                 319523                 112932           PRODUCT_DB        M:\PRODUCT_DB.MDF

 

(1개행적용됨)

 

DBCC 실행이완료되었습니다. DBCC에서오류메시지를출력하면시스템관리자에게문의하십시오.

 

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

 

허허 TotalExtents가 조금밖에 줄지를 않았다 112932까지 줄어야하는데 ..

 

이유는 TRUNCATEONLY를 실행하기전 . NOTRUNCATE 옵션으로 빈공간 정렬을 먼저 실행하지 않아서 그런거같다 -_-ㅋ

 

 

전문가 분들에게 문의해본결과 축소는 특별한 상황 아닌이상 절대 추천하지 않는다 합니다..

 

축소에 관한 자세한 정보는  유명하신 SQL Server MVP 강상욱님 블로그에 있습니다.

 

http://sqlmvp.kr/140124850555?Redirect=Log&from=postView

Comment +0