[MS-SQL SERVER 2008 로그 파일 사이즈 줄이기]
MS-SQL 2008 이전 버젼 :
BACKUP LOG [DB NAME] WITH TRUNCATE_ONLY
GO
DBCC SHRINKFILE([DB NAME])
MS-SQL2008 버젼 :
ALTER DATABASE [DB NAME] SET RECOVERY SIMPLE
GO
DBCC SHRINKFILE([DB NAME])
GO
ALTER DATABASE [DB NAME] SET RECOVERY FULL
Database 정보
SP_HELPDB : Database 정보
SP_HELPFILE : DB file 정보
--// db file 필요한 정보 간단히 보기
SELECT name ,size/128.0 dbsize , size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS AvailableSpaceInMB FROM sys.database_files
==========================================================================================================================
DBCC SHRINKFILE
(
{ file_name | file_id }
{ [ , EMPTYFILE ]
| [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]
}
)
[ WITH NO_INFOMSGS ]
EMPTYFILE
지정한 파일의 모든 데이터를 동일한 파일 그룹의 다른 파일로 마이그레이션합니다. 데이터베이스 엔진에서 더 이상 빈 파일에 데이터를 저장할 수 없으므로 ALTER DATABASE 문을 사용하여 파일을 제거할 수 있습니다.
NOTRUNCATE
target_percent를 지정하거나 지정하지 않고 데이터 파일의 끝에 있는 할당된 페이지를 파일 앞의 할당되지 않은 페이지로 이동합니다. 파일 끝에 남은 여유 공간을 운영 체제에 반환하지 않으므로 파일의 물리적 크기는 변경되지 않습니다. 그러므로 NOTRUNCATE를 지정하면 파일이 축소되지 않는 것처럼 보입니다.
NOTRUNCATE는 데이터 파일에만 적용되며 로그 파일에는 영향을 주지 않습니다.
TRUNCATEONLY
파일 끝에 남은 모든 여유 공간을 운영 체제로 확보하지만 파일 내에서 페이지를 이동하지 않습니다. 데이터 파일은 마지막으로 할당된 익스텐트까지만 축소됩니다.
TRUNCATEONLY와 함께 지정하면 target_size는 무시됩니다.
TRUNCATEONLY는 데이터 파일에만 적용됩니다.
사용 권한
sysadmin 고정 서버 역할 또는 db_owner 고정 데이터베이스 역할의 멤버 자격이 필요합니다.
1. 데이터 파일을 지정한 대상 크기로 축소
다음 예에서는 UserDB 사용자 데이터베이스에 있는 DataFile1이라는 데이터 파일의 크기를 7MB로 축소합니다.
USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO
2. 로그 파일을 지정한 대상 크기로 축소
다음 예에서는 AdventureWorks2008R2 데이터베이스에 있는 로그 파일을 1MB로 축소합니다. DBCC SHRINKFILE 명령이 파일을 축소할 수 있도록 먼저 데이터베이스 복구 모델을 SIMPLE로 설정하여 파일을 자릅니다.
USE AdventureWorks2008R2;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE AdventureWorks2008R2
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (AdventureWorks2008R2_Log, 1);
GO
-- Reset the database recovery model.
ALTER DATABASE AdventureWorks2008R2
SET RECOVERY FULL;
GO
3. 데이터 파일 자름
다음 예에서는 AdventureWorks2008R2 데이터베이스의 주 데이터 파일을 자릅니다. sys.database_files 카탈로그 뷰를 쿼리하여 데이터 파일의 file_id를 가져옵니다.
USE AdventureWorks2008R2;
GO
SELECT file_id, name
FROM sys.database_files;
GO
DBCC SHRINKFILE (1, TRUNCATEONLY);
4. 파일 비우기
다음 예에서는 데이터베이스에서 제거할 수 있도록 파일을 비우는 프로시저를 보여 줍니다. 이 예의 목적을 위해 데이터 파일이 먼저 생성되고 파일에 데이터가 있다고 가정합니다.