트랜잭션 백업 실패와 전체 백업 성공 그리고 대처 방안
- Version : SQL Server 2005, 2008, 2008R2, 2012
SQL Server에서 트랜잭션 로그는 SQL Server에서 발생하는 모든 행동을 기록 한다. 다음 사례는 트랜잭션 백업이 실패하지만 전체 백업은 성공하는 경우에 대해서 알아 본다.
다음과 같이 트랜잭션 로그가 손상되어 백업이 실패하였다.
하지만 전체 백업은 성공하였으며 DBCC CHECKDB 도 성공하였다. 트랜잭션 백업이 실패하였지만 전체 백업이 성공한 이유는 트랜잭션 로그의 아키텍처를 살펴보면 이해 할 수 있다.
- 트랜잭션 로그 물리 아키텍처 : http://sqlmvp.kr/140187358202
트랜잭션 로그 백업은 마지막 트랜잭션 로그 백업 이후에 생성된 트랜잭션에 대해서만 백업한다. 그래서 손상된 부분의 백업을 시도하고 실패한다.
전체 데이터베이스 백업은 데이터베이스가 복원 및 복구할 때 일관성 있는 지점으로 복구 할 수 있도록 트랜잭션 로그를 가지고 있다. 즉 전체 백업 완료 이후 시점에서 가장 오래된 활성 트랜잭션의 시작 트랜잭션 로그를 확인하고 필요로 한다.
- 백업 기록 및 헤더 정보 : http://technet.microsoft.com/ko-kr/library/ms188653.aspx
DBCC CHECK 작업은 일관성 검사를 위해 트랜잭션의 일관성 있는 뷰를 얻을 수 있는 데이터베이스 스냅숏을 사용한다. 이러한 데이터베이스 스냅샷 생성은 응급복구시 일관성을 유지를 위해 사용 할 수 있다. 즉 전체 백업이 실행 된 것처럼 전체 백업 이후 가장 오래된 활성 트랜잭션을 필요로 한다. 그래서 트랜잭션 백업이 실패하더라도 전체 백업은 가능하다.
그렇다면 트랜잭션 로그 파일이 손상되었을 때는 어떻게 해야 할까? 응급 상황의 경우 다음과 같은 방법으로 대처할 수 있다.
- 데이터베이스의 모든 사용자들의 활동을 중지 한다. (single user mode)
- 데이터베이스 모델을 심플로 변경 한다. (recovery mode simple)
- 데이터베이스 모델을 전체로 변경 한다. (recovery mode full)
- 전체 데이터베이스 백업을 수행 한다. (새로운 로그 백업 체인 시작)
- 로그 백업을 한다.
가장 중요한 것은 손상이 발생 된 근본적인 이유를 찾아서 해결하는 것이며 다시 발생하지 않도록 예방하는 것이다.
[참고자료]
http://www.sqlskills.com/blogs/paul/how-can-a-log-backup-fail-but-a-full-backup-succeed/
강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp