본문 바로가기

DB/MSSQL

MSSQL - 데이터 / 로그파일 용량 줄이기 (dbcc shrinkfile)

728x90

DBCC SHRINKFILE 명령어는 DBCC에서 제공하는 데이터 용량을 줄이는 명령어입니다.

사용법
DBCC SHRINKFILE   
(  
    { file_name | file_id }   
    { [ , EMPTYFILE ]   
    | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]  
    }  
)  
[ WITH NO_INFOMSGS ]

  • file_name : 축소할 파일의 논리적 이름
  • file_id : 축소할 파일의 ID
  • target_size : 축소할 파일의 사이즈 (MB)
  • EMPTYFILE : 다른 파일로 데이터를 옮긴다. (단, 같은 그룹 내 파일이어야 함)
  • NOTRUNCATE : target_size 값과 관계없이 데이터 파일의 끝에서 할당된 데이터를 파일 앞의 할당되지 않은 공간으로 이동 한다. (파일이 축소되지 않은 것처럼 보임)  -> 디스크 조각 모음과 유사
  • TRUNCATEONLY : 파일 끝의 모든 사용 가능한 공간을 운영체제에 반납한다. (데이터 이동은 없음)

 

​MS-SQL 2005 이하 버전에서의 로그축소 방법


USE 데이터베이스명    //    데이터베이스에 연결
BACKUP LOG 데이터베이스명 WITH NO_LOG     //  로그 파일을 삭제
DBCC SHRINKFILE (데이터베이스명_log, TRUNCATEONLY)   //  파일 크기는 가장 작게 설정

 

MS-SQL 2008 이상에서의 로그축소 방법

USE 데이터베이스명
GO
ALTER DATABASE 데이터베이스명 SET RECOVERY SIMPLE
GO
DBCC SHRINKFILE(데이터베이스명_log, 100)         //    두 번째 인자는 MB 기준
GO
ALTER DATABASE 데이터베이스명 SET RECOVERY FULL
GO

 

MS-SQL 2008 부터는 복구 모델이 '전체' 였으면 '단순' 으로 변경하고 로그파일을 줄여야 합니다.

전체 복구 모델 - Full Recovery Model
대량 로그 복구 모델 - Bulked-Log Recovery Model
단순 복구 모델 - Simple Recovery Model 


USE 데이터베이스명
GO
ALTER DATABASE 데이터베이스명 SET RECOVERY SIMPLE
GO
DBCC SHRINKFILE(데이터베이스명_log)     //  두 번째 인자가 비어있거나 0 이면 파일크기 최소로 설정
GO
ALTER DATABASE 데이터베이스명 SET RECOVERY FULL  

 

 

 

 

반응형

 

 

※ 만약 축소가 안 되는 경우가 발생하면

 
DBCC FREEPROCCACHE   //  프로시저 캐시 초기화
GO
 
DBCC DROPCLEANBUFFERS   //   Buffer Pool에 존재하는 데이터 페이지를 제거

 

Go
 
DBCC FREESYSTEMCACHE ('ALL')    //    사용 하지 않는 모든 캐시 삭제
GO
 
DBCC FREESESSIONCACHE    //  연결 한 세션/캐시 삭제
GO
 
dbcc shrinkfile ([로그명],1024)    //  용량 1G로 설정
GO

 

※ tempdb의 경우 재부팅하면 초기화됨

 

1. TempDB의 초기 사이즈를 확인하는 방법

SELECT name, size*8 AS init_size_KB, physical_name 
FROM master.sys.master_files where database_id=2

2. TempDB의 현재 사이즈를 확인하는 방법

SELECT name, size*8, physical_name 
FROM tempdb.sys.database_files

또는 

sp_helpdb tempdb

3. TempDB 초기 사이즈 변경방법(현재 사이즈에 영향 없음)

 

ALTER DATABASE TEMPDB MODIFY FILE(NAME='TEMPDEV', SIZE=1GB, FILEGROWTH=100MB)

728x90
반응형

'DB > MSSQL' 카테고리의 다른 글

MSSQL - TOP()과 ROW_NUMBER()를 활용한 데이터 조회 방법  (0) 2024.09.27