지난 아티클에 이어 계속 LDF 파일 관련해서 흔하게 만날 수 있는 이슈들로 이어갑니다.


SQL Server 가상 로그 파일 VLF 관리

http://yoonsy.tistory.com/25


[Trouble Shooting] LDF 파일 손상.. undocumented alter database.

http://yoonsy.tistory.com/21


LDF 파일이 OS 볼륨에 Full이 나서 장애가 시작되었고, DBCC SHRINKFILE로 축소를 해봐도 크기가 똑같고 축소가 안되는 경우가 있습니다.


이 이슈의 경우에는 흔하게 만날 수 있지만, 지금은 능숙해진 DBA들도 맨 처음 만났을 때는 땀 좀 흘렸을 법한 이슈입니다.


이럴 때는 다음과 같이 접근하면 축소가 안된 원인을 쉽게 찾을 수 있습니다.


USE yoonsy

GO


SELECT name, state, state_desc, log_reuse_wait, log_reuse_wait_desc

FROM sys.databases WITH (NOLOCK)

WHERE database_id = DB_ID('yoonsy')

GO


로그 잘림을 지연시킬 수 있는 요소

http://msdn.microsoft.com/ko-kr/library/ms345414(v=sql.105).aspx


로그 reuse_wait가 NOTHING 일리는 없습니다. 그렇다면 축소가 됐어야 합니다. 

"로그 잘림을 지연시킬 수 있는 요소"의 내용을 보고 그 값에 따라 진행을 해야합니다.


많은 경우가 LOG_BACKUP 이나, ACTIVE_TRANSACTION일 겁니다. 미러링된 DB라면 DATABASE_MIRRORING


그냥 제가 겪었던 해당 종류별로는 조치 방법은 다음과 같습니다. CASE가 더 다양할 수 있으므로 아래 case는 참고만 하고 실제 액션은 각자 시스템에 맞게 진행해야 합니다.


LOG_BACKUP

:  트랜잭션 로그가 백업 중이거나, 전체 백업을 한번도 안받아서 트랜잭션 로그 백업을 받지 못하는 경우가 있습니다. 그런 경우에 이렇게 나옵니다. 일단 이럴 경우에는 BACKUP LOG ~ 로 트랜잭션 로그 백업을 시도해봅니다. 전체 백업이 없어서 트랜잭션 로그 백업을 못받았다면 BACKUP LOG 가 실패할 겁니다. 그럼 BACKUP DATABASE 로 전체 백업을 먼저 받습니다. 그 이후에 축소를 해보세요.


ACTIVE_TRANSACTION

: 장기활성화된 큰 트랜잭션이 진행 중이어서 LDF 축소가 안됩니다.


USE yoonsy

GO


DBCC OPENTRAN


으로 장기 활성 트랜잭션 세션 id를 얻고 해당 세션의 쿼리를 확인합니다.


DBCC INPUTBUFFER(세션아이디)

해당 쿼리를 처리하고 나서야 축소가 됩니다.


SQL Server 2000 에서는 sys.databases 해당 컬럼이 없어 아쉽습니다.


저 같은 경우에는 일단 장기 활성 트랜잭션을 먼저 보고, log backup을 해봅니다.




+ Recent posts