압축 백업 시 Checksum 옵션으로 손상 확인하기
- Version : SQL Server 2012
데이터베이스를 백업할 때 이미 백업 자체가 손상되어 있다면 백업이 아무런 의미가 없다. 백업 할 때 CHECK 옵션을 사용하여 손상 여부를 확인 할 수 있다.
백업할 때 WITH CHECKSUM 매개변수는 각 페이지의 체크섬을 확인하고 손상이 있을 경우 경고를 발생 한다.
- SQL Server Backup : http://technet.microsoft.com/ko-kr/library/ms186865.aspx
- NO_CHECKSUM : 백업 체크섬 생성 및 페이지 체크섬의 유효성 검사를 명시적으로 해제 한다.
- CHECKSUM : 백업 작업이 각 페이지의 체크섬과 조각난 페이지를 확인하고 사용 가능할 경우 전체 백업에 대해 체크섬을 생성하도록 지정한다. 백업 체크섬을 사용하면 작업 및 백업 처리량에 영향을 줄 수 있다.
다음은 SQL Server에서 서비스를 중지한다 다음 헥사에디터 프로그램을 사용하여 클러스터인덱스에 손상을 가하였다. 그리고 일반적인 압축 백업을 진행 하였다.
BACKUP DATABASE [AdventureWorks2012] TO DISK = N'\\DC1\SQLCLUSTERA\MSSQL\Backup\AW20131202_248_NoChecksum' WITH NOFORMAT, INIT, NAME = N'AdventureWorks2012-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10 |
압축 백업의 기본 설정이 WITH CHECKSUM 임에도 불구하고 백업이 오류 없이 잘 진행되었다. 이번에는 압축 백업에 명시적으로 CHECKSUM 옵션을 사용하였다.
BACKUP DATABASE [AdventureWorks2012] TO DISK = N'\\DC1\SQLCLUSTERA\MSSQL\Backup\AW20131202_256_Checksum' WITH NOFORMAT, INIT, NAME = N'AdventureWorks2012-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10, CHECKSUM |
다음 에러 구문과 함께 백업이 중단 되었다.
10 percent processed. Msg 3043, Level 16, State 1, Line 4 BACKUP 'AdventureWorks2012' detected an error on page (1:3578) in file '\\dc1\SQLClusterA\MSSQL\Data\AdventureWorks2012_Data.mdf'. Msg 3013, Level 16, State 1, Line 4 BACKUP DATABASE is terminating abnormally |
결론적으로 압축 백업에서는 체크섬을 기본적으로 확인 하지 않았다. BOL 문서에는 다음과 같이설명 되어 있다. [This is the default behavior, except for a compressed backup.]
SQL Server 2012에서 도입된 AlwaysOn 가용성 그룹의 장점은 복제 본 중 하나가 손상되면 페이지를 자동으로 복구 한다는 것이다. 위에서 첫 번째 백업(compression, no_checksum)을 실행 한 후 sys.dm_hadr_auto_page_repair을 실행 하였을 때 손상을 감지 하지 못하였다. 두 번째 백업(compression, checksum)을 실행 한 후 sys.dm_har_auto_repair를 조회하였을 때에는 페이지 손상이 감지 되고 자동 페이지 복구 이후 정상적인 백업이 완료 되었다.
[참고자료]
강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp