2007~2011/SQL Server2008. 11. 27. 18:49

데이터베이스의 트랜잭션 로그가 저장된 디스크의 용량이 가득차는 Disk Full 문제로 장애가 발생하는 사례를 주위에서 가끔(?) 볼 수 있습니다. 대부분 Recovery Mode가 Full 로 되어 있고 트랜잭션 로그 파일이 무제한 증가로 설정되어 있는 환경입니다. 일반적인 조치 방법으로 로그를 백업 받은 후 shrinkfile 을 수행하면 좋겠습니다만 상황이 여의치 않다면 복구 모델을 simple 로 변경하여 shrink  를 진행할 수도 있겠습니다.

로그 축소에 앞서 작업 전과 후에 백업을 통해 만약의 상황을 대비하는 습관이 필요합니다. 물론 사전에 데이터베이스 유지 관리 계획을 통한 관리가 필요하겠습니다만....

현재 로그를 Truncate 한 뒤 트랜잭션 로그 파일을 축소하는 방법에 대해서 아래와 같이 정리하였습니다. 이 방법을 사용할 경우 기존 트랜잭션 로그는 사라지는 거 아시죠?


[환경]
SQL Server 2000

USE LAIGODB
GO
DBCC SQLPERF(LOGSPACE)

-- 현재 DB의 사용된 공간 크기를 확인하며 트랜잭션 로그를 백업하거나 잘라낼 시기를 결정할 수 있습니다.


BACKUP LOG LAIGODB WITH TRUNCATE_ONLY
-- TRUNCATE_ONLY 옵션으로 트랜잭션 로그가 잘리도록 수동으로 CHECK POINT를 강제 수행합니다.
-- 별도 로그는 백업되지 않으며 활성 트랜잭션 로그를 제외한 모든 부분의 로그를 잘라냅니다.
-- NO_LOG와 같은 의미의 옵션이며 SQL Server 2008에서는 이 옵션이 제거되었습니다.


BACKUP DATABASE LAIGODB TO DISK = 'D:BACKUP\LAIGO_200811270941.BAK'
-- 위에서 잘린 트랜잭션 로그는 다음 백업 시까지 복원할 수 있는 방법이 없으니 반드시 데이터베이스를
-- Full Backup 할 것을 권장합니다.


DBCC SHRINKFILE (LAIGODB_LOG, 2000) -- 2GB
-- 물리적 파일 크기가 늘어난 LAIGODB의 LAIGODB_LOG 파일의 크기를 2GB로 축소합니다.
-- 최대 사이즈, 확장 옵션도 함께 점검하면 좋겠습니다.


SP_HELPDB 'LAIGODB'
-- 작업 수행 후 데이터베이스 상태를 확인합니다.



[참고자료]
BACKUP(Transact-SQL)
http://msdn.microsoft.com/ko-kr/library/ms186865(SQL.90).aspx#Mtps_DropDownFilterText

DBCC SHRINKFILE(Transact-SQL)
http://msdn.microsoft.com/ko-kr/library/ms189493(SQL.90).aspx


작성자 : Lai Go / 작성일자 : 2008.11.27

Posted by Lai Go