압축 백업 시 Checksum 옵션으로 손상 확인하기

 

  • Version : SQL Server 2012

 

데이터베이스를 백업할 때 이미 백업 자체가 손상되어 있다면 백업이 아무런 의미가 없다. 백업 할 때 CHECK 옵션을 사용하여 손상 여부를 확인 할 수 있다.

 

백업할 때 WITH CHECKSUM 매개변수는 각 페이지의 체크섬을 확인하고 손상이 있을 경우 경고를 발생 한다.

  • 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를 조회하였을 때에는 페이지 손상이 감지 되고 자동 페이지 복구 이후 정상적인 백업이 완료 되었다.

 

[참고자료]

http://www.brentozar.com/archive/2013/12/alwayson-availability-groups-backup-checksums-and-corruption/

 



강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 33996
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 17166
1934 확장이벤트를 사용하여 데드락 정보 확인 jevida(강성욱) 2016.10.15 1659
1933 확장 이벤트를 사용한 CPU 고부하 쿼리 추적 [1] jevida(강성욱) 2016.10.15 2220
1932 데이터에 대한 이해와 spill in tempdb jevida(강성욱) 2016.10.13 1816
1931 로그 파일이 많으면 왜 안 좋은가 jevida(강성욱) 2016.10.13 2118
1930 트랜잭션 백업 실패와 전체 백업 성공 그리고 대처 방안 jevida(강성욱) 2016.10.13 1618
1929 Fast recovery 와 로그 잠금 jevida(강성욱) 2016.10.13 2072
1928 고스트 클린업 jevida(강성욱) 2016.10.13 2346
1927 페이지 분할이 발생 하였을 때 롤백을 하면 어떻게 될까? jevida(강성욱) 2016.10.13 1711
1926 DBCC WRITEPAGE - DBCC 명령을 사용한 데이터 파괴하기 jevida(강성욱) 2016.10.13 1695
1925 SQL Server Backup Error 3023 jevida(강성욱) 2016.10.13 2446
1924 Delete 작업과 페이지 offset 변화 jevida(강성욱) 2016.10.13 1545
1923 트랜잭션 로그 및 LSN을 이용한 삭제된 데이터 복구 jevida(강성욱) 2016.10.13 5825
1922 PFX 형식의 인증서를 SQL Server에서 사용하기 jevida(강성욱) 2016.10.13 1212
1921 SQL Server NUMA 메모리 노드와 Operating System 접근 jevida(강성욱) 2016.10.13 1368
1920 SQL Server 에러 핸들링 비용 비교 jevida(강성욱) 2016.10.13 1357
» 압축 백업 시 Checksum 옵션으로 손상 확인하기 jevida(강성욱) 2016.10.13 1751
1918 SQL Server 2012 Memory Manager 구성 jevida(강성욱) 2016.10.13 1302
1917 SQL Server Memory Manager 변화 jevida(강성욱) 2016.10.13 1560
1916 Ring_Buffer_Resource_Monitor jevida(강성욱) 2016.10.13 1093
1915 SQL Server 프로파일러 템플릿 만들기 jevida(강성욱) 2016.10.13 1424





XE Login