트랜잭션 로그를 줄이는 방법을 검색해보면 대략 다음의 두가지 방법을 찾을 수 있다.
1. 데이터베이스 복구모델을 simple로 변경하는 방법
2. 트랜잭션 로그를 백업하고 로그파일 크기를 줄이는 방법
2번 방법에 대해서는 다음과 같이 수행한다.
2.1 로그파일 백업
backup log DatabaseName to disk='YourPath\YourFilename.trn'
2.2 로그파일 크기 줄임
dbcc shrinkfile('logfilename', 1024)
※ DatabaseName, logfilename 은 해당 DB 정보를 확인
※ YourPath, YourFilename 은 백업할 위치 및 파일명을 입력
그런데 이 방법을 사용하게 되면 한번에 잘될때도 있지만 사용이 빈번한 DB의 경우 한번에 줄어들지 않고 여러번 반복해야 원하는 크기로 줄일 수 있다.
다른 포스트와 다르게 참고 URL을 상단에 둔 이유가 바로 여기에 있다.
Otto R. Radke 라는 분의 블로그 인데 소개글이 재밌다.
Developer & designer. Americano drinker, tennis player. Goal: be simple, passionate & resourceful.
------------------------------------------------------------------------------
-- Otto R. Radke - http://ottoradke.com
-- Info: T-SQL script to shrink a database's transaction log. Just set the
-- database name below and run the script and it will shrink the
-- transaction log.
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-- Update the line below with the name of the database who's transaction
-- log you want to shrink.
------------------------------------------------------------------------------
USE YourDatabaseName
------------------------------------------------------------------------------
-- Don't change anything below this line.
------------------------------------------------------------------------------
GO
-- Declare variables
DECLARE @SqlStatement as nvarchar(max)
DECLARE @LogFileLogicalName as sysname
-- Alter the database to simple recovery
SET @SqlStatement = 'ALTER DATABASE ' + DB_NAME() + ' SET RECOVERY SIMPLE'
EXEC ( @SqlStatement )
-- Make sure it has been altered
SELECT [name], [recovery_model_desc] FROM sys.databases WHERE [name] = DB_NAME()
-- Set the log file name variable
SELECT @LogFileLogicalName = [Name] FROM sys.database_files WHERE type = 1
-- Shrink the logfile
DBCC Shrinkfile(@LogFileLogicalName, 1)
-- Alter the database back to FULL
SET @SqlStatement = 'ALTER DATABASE ' + DB_NAME() + ' SET RECOVERY FULL'
EXEC ( @SqlStatement )
-- Make sure it has been changed back to full
SET @SqlStatement = 'SELECT [name], [recovery_model_desc] FROM ' + DB_NAME() + '.sys.databases WHERE [name] = ''' + DB_NAME() + ''''
EXEC ( @SqlStatement )
------------------------------------------------------------------------------
실행해 보면 1M의 크기로 로그파일을 줄여준다. 너무 고마워서 해당 블로그에 답글도 쓰고 이렇게 국내에도 소개한다. 물론 검색을 잘하면 걸리기야 하겠지만.. ^^;