데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

트랜잭션 백업 실패와 전체 백업 성공 그리고 대처 방안

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

SQL Server에서 트랜잭션 로그는 SQL Server에서 발생하는 모든 행동을 기록 한다. 다음 사례는 트랜잭션 백업이 실패하지만 전체 백업은 성공하는 경우에 대해서 알아 본다.

 

다음과 같이 트랜잭션 로그가 손상되어 백업이 실패하였다.

 

하지만 전체 백업은 성공하였으며 DBCC CHECKDB 도 성공하였다. 트랜잭션 백업이 실패하였지만 전체 백업이 성공한 이유는 트랜잭션 로그의 아키텍처를 살펴보면 이해 할 수 있다.

 

트랜잭션 로그 백업은 마지막 트랜잭션 로그 백업 이후에 생성된 트랜잭션에 대해서만 백업한다. 그래서 손상된 부분의 백업을 시도하고 실패한다.

 

전체 데이터베이스 백업은 데이터베이스가 복원 및 복구할 때 일관성 있는 지점으로 복구 할 수 있도록 트랜잭션 로그를 가지고 있다. 즉 전체 백업 완료 이후 시점에서 가장 오래된 활성 트랜잭션의 시작 트랜잭션 로그를 확인하고 필요로 한다.

 

DBCC CHECK 작업은 일관성 검사를 위해 트랜잭션의 일관성 있는 뷰를 얻을 수 있는 데이터베이스 스냅숏을 사용한다. 이러한 데이터베이스 스냅샷 생성은 응급복구시 일관성을 유지를 위해 사용 할 수 있다. 즉 전체 백업이 실행 된 것처럼 전체 백업 이후 가장 오래된 활성 트랜잭션을 필요로 한다. 그래서 트랜잭션 백업이 실패하더라도 전체 백업은 가능하다.

 

그렇다면 트랜잭션 로그 파일이 손상되었을 때는 어떻게 해야 할까? 응급 상황의 경우 다음과 같은 방법으로 대처할 수 있다.

  1. 데이터베이스의 모든 사용자들의 활동을 중지 한다. (single user mode)
  2. 데이터베이스 모델을 심플로 변경 한다. (recovery mode simple)
  3. 데이터베이스 모델을 전체로 변경 한다. (recovery mode full)
  4. 전체 데이터베이스 백업을 수행 한다. (새로운 로그 백업 체인 시작)
  5. 로그 백업을 한다.

 

가장 중요한 것은 손상이 발생 된 근본적인 이유를 찾아서 해결하는 것이며 다시 발생하지 않도록 예방하는 것이다.

 

 

[참고자료]

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

No. Subject Author Date Views
1943 성능분석 9탄 – 쿼리 실행 분석 jevida(강성욱) 2016.10.15 4137
1942 성능분석 8탄 – IO 통계 (DISK 활동 분석) jevida(강성욱) 2016.10.15 1485
1941 성능분석 7탄 – 프로파일러 대기 유형 및 PREEMPTIVE_OS_WRITEFILEGATHER jevida(강성욱) 2016.10.15 1658
1940 성능분석 6탄 – CPU 경합 및 동시성 관련 대기 유형 jevida(강성욱) 2016.10.15 1921
1939 성능분석 5탄 – 메모리 및 네트워크 관련 대기 유형 jevida(강성욱) 2016.10.15 2056
1938 성능분석 4탄 – 디스크 및 IO 관련 대기 유형 jevida(강성욱) 2016.10.15 2181
1937 성능분석 3탄 – 집계 대기 통계 jevida(강성욱) 2016.10.15 1953
1936 성능분석 2탄 – 실행 요청을 기다리는 작업 확인 및 분석 (병렬 처리 대기 확인) jevida(강성욱) 2016.10.15 1397
1935 성능분석 1탄 – 실행 요청을 기다리는 작업 확인 및 분석 jevida(강성욱) 2016.10.15 2036
1934 확장이벤트를 사용하여 데드락 정보 확인 jevida(강성욱) 2016.10.15 1582
1933 확장 이벤트를 사용한 CPU 고부하 쿼리 추적 [1] jevida(강성욱) 2016.10.15 2159
1932 데이터에 대한 이해와 spill in tempdb jevida(강성욱) 2016.10.13 1781
1931 로그 파일이 많으면 왜 안 좋은가 jevida(강성욱) 2016.10.13 2085
» 트랜잭션 백업 실패와 전체 백업 성공 그리고 대처 방안 jevida(강성욱) 2016.10.13 1570
1929 Fast recovery 와 로그 잠금 jevida(강성욱) 2016.10.13 2037
1928 고스트 클린업 jevida(강성욱) 2016.10.13 2284
1927 페이지 분할이 발생 하였을 때 롤백을 하면 어떻게 될까? jevida(강성욱) 2016.10.13 1670
1926 DBCC WRITEPAGE - DBCC 명령을 사용한 데이터 파괴하기 jevida(강성욱) 2016.10.13 1657
1925 SQL Server Backup Error 3023 jevida(강성욱) 2016.10.13 2341
1924 Delete 작업과 페이지 offset 변화 jevida(강성욱) 2016.10.13 1498





XE Login