본문 바로가기
DATABASE/MsSQL

[MSSQL] Backup 파일 깨짐과 Checksum 옵션

by DANEW 2026. 4. 15.
반응형

Backup 파일 깨짐

데이터베이스를 운영하다보면, 충격적이게도 백업파일이 깨질 수 있다.

만나보고 싶지 않았지만, 몇 번의 백업 파일이 깨지는 상황을 마주하게 되어 매우 고생했던 기억이 있다.

 

그 중 한번은 이미 Full Backup 전부터 특정 page가 깨져있던 상태였는데,

그 상태에서는 그냥 일반적으로 백업 / 복구가 가능 했던거로 기억한다... page는 이미 깨져있는 상태로...

 

다른 한번은 로그 쉬핑 과정에서 발생했는데,

Trn Backup을 하고 Standby 서버에 자동으로 복구 되던 중 복구 실패를 했었다.

근데 문제는 깨진 백업 파일까지 복구되고... 그 후 데이터가 깨져있으니 그 다음 복구가 안됐던 거로 기억을 한다. 

실제 page는 문제가 없이 백업파일만 문제였었다.

로그쉬핑으로 DR을 구성해 놨건만... 이렇게 백업/복구의 이슈로 DR이 기능을 못할 가능성이 생기니 매우 큰 문제였다.

 

이러한 문제들을 겪고 어떻게 하면 더욱 안정적인 백업과 복구를 진행 할 수 있을까? 에 대한 고민을 하게되었다.

Full Backup / Trn Backup 둘다 한번씩 문제를 만나보았으니 말이다.

 

CHECKSUM 옵션

MSSQL 에는 백업/복구 시 CHECKSUM 이라는 옵션이 있다.

 

백업 파일 내부에 저장된 개별 페이지의 체크섬 값을 하나하나 확인하여 무결성을 검증한다고 한다.

자세한 구동방식은 모르겠으나, 백업파일이 깨지는 것에 대한 것을 사전에 알 수 있는 옵션이다.

 

Backup with checksum

Full backup 과 Trn backup 에 둘 다 사용할 수 있는 옵션이다.

-- Full Backup
backup database [DB명] to disk = '[백업파일 경로].bak' with checksum

-- Trn Backup
backup log [DB명] to disk = '[백업파일 경로].trn' with checksum

 

with 문 뒤에 checksum 옵션으로 백업을 할때 수행 할 수 있다.

유지관리계획 GUI에서도 백업 무결성 확인 이라는 체크박스가 있는데... 버그인건지 체크해서 수행해도 with checksum 옵션이 안들어가는 것 같다.

 

checksum 옵션을 주더래도 백업이 잘 된다는 것은아니고, 문제가 있을 경우 깨진상태의 백업완료가 아닌 실패 처리가 된다.

만약 실제 데이터 page가 깨졌을 경우, 데이터 page에 대한 조치를 꼭 해줘야 하는 상황이다.

 

checksum 옵션을 모든 백업에 기본으로 주는 configure 옵션이 있다.

일반적인 백업은 GUI에서 안된다 한들, 스크립트나 다른 방식으로 어떻게든 해낼 수 있었는데,

로그쉬핑의 백업은 옵션을 수정하는 방법을 도저히 찾지 못하였다. 그래서 찾다보니 확인 하게 된 옵션이다

-- 옵션 수정 잠금 해제 (0 잠금 / 1 해제)
exec sys.sp_configure 'show advanced options', 1
reconfigure

-- CHECKSUM 옵션 활성화 (0 비활성화 / 1 활성화)
exec sys.sp_configure 'backup checksum default', 1
reconfigure

-- 옵션 활성화 확인 value = 1이면 활성화
select name, 
       value, 
       value_in_use
  from sys.configurations
 where name = 'backup checksum default'

-- 옵션 수정 잠금 (0 잠금 / 1 해제)
exec sys.sp_configure 'show advanced options', 0
reconfigure

 

Restore verifyonly with checksum

Backup 시 checksum 옵션을 주고 백업했다면, 복구를 진행하는데에도 checksum 옵션을 사용하여 파일을 체크 할 수 있다.

백업 시에 이미 체크하고 문제가 있으면 백업 실패하지만 왜 복구전에 확인하냐고 생각하겠지만,

파일 이동이나 외부 요인으로 파일에 문제가 발생 할 수 있으니, 한번 더 체크를 할 필요가 있다.

-- Full Backup / Trn Backup 모두 가능
restore verifyonly from disk = '[백업파일 경로].bak' with checksum

 

이렇게 복구 전에 백업 파일을 한번 검사하여 무결성을 체크 할 수 있다.

로그 쉬핑 백업도 checksum 옵션을 넣지 못하여 디폴트 값으로 해결했었다.

 

복구시에는 원격지로 백업파일을 이관 후 문제가 있는지 없는지 복구 시 옵션을 주고 싶었지만, 마찬가지로 수정하는 방법을 찾지못했다.

그래서 모든 로그쉬핑 agent의 restore 단계 앞에 현재까지 복구된 최종 Trn Backup 파일부터, 복구를 기다리는 모든 Trn Backup 파일을 restore verifyonly with checksum으로 확인하는 프로시저를 생성하여 체크 후 복구를 진행하게 되었다.

 

이로써 문제가 되는 파일이 복구 되는 일은 없게되어 안심하고 로그쉬핑을 운영하게 되었다.

 

Restore with checksum

백업파일 확인이 아닌 실제 복구시에도 사용 할 수 있다.

이 옵션을 사용하지 않을 경우 깨진 상태로 복구가 될 수 있으니, checksum 옵션을 주고 백업한 파일은 꼭 해당 옵션을 추가해서 복구 할 수 있도록 하자.

-- Full Backup Restore
restore database [DB명] from disk = '[백업파일 경로].bak' with checksum, norecovery

-- Trn Backup Restore
restore database [DB명] from disk = '[백업파일 경로].trn' with checksum, norecovery

 

COMMENT

백업 파일이 깨는 경험을 하며, 어떻게하면 해결 할 수 있고 예방 할 수 있을까 많은 고민을 하게 되었떤 이슈 였던 것 같습니다.

백업 파일이 깨지는 것이아닌... 복구 한 후에 깨지는 이슈도 만나 본 적이 있는데요.

그 내용은 따로 기회가 된다면 포스팅 해보도록 하겠습니다.

 

Related Posts

[MsSQL] 백업 파일 관리 - 최근 전체 백업과 하위 로그 백업 확인하기

[MsSQL] SQL Server - Log Shipping 을 활용한 이중화 (DR 구성)

[MsSQL] Database Backup이란? - Full / Differential / Log Backup

[MsSQL] DBCC WRITEPAGE를 활용한 Data Page 오류 만들기 및 테스트

 

반응형