데이터베이스 스냅샷(SQL Server)
적용 대상: SQL Server
데이터베이스 스냅샷은 SQL Server 데이터베이스( 원본 데이터베이스)의 읽기 전용 고정적 보기입니다. 데이터베이스 스냅샷은 스냅샷 생성 시의 원본 데이터베이스와 트랜잭션 측면에서 일관성을 가집니다. 데이터베이스 스냅샷은 항상 원본 데이터베이스와 동일한 서버 instance에 상주합니다. 데이터베이스 스냅샷은 스냅샷을 만들 때와 동일한 상태의 데이터 읽기 전용 뷰를 제공하는 반면, 스냅샷 파일의 크기는 원본 데이터베이스가 변경됨에 따라 증가합니다.
데이터베이스 스냅샷은 AS SNAPSHOT OF
구문을 사용하여 CREATE DATABASE T-SQL 구문을 사용하여 만들어집니다.
지정된 원본 데이터베이스에 여러 스냅샷이 있을 수 있습니다. 각 데이터베이스 스냅샷은 데이터베이스 소유자가 명시적으로 삭제할 때까지 유지됩니다.
참고 항목
데이터베이스 스냅샷은 스냅샷 백업, Transact-SQL 스냅샷 백업, 트랜잭션의 스냅샷 격리 또는 스냅샷 복제와 관련이 없습니다.
데이터베이스 스냅샷 개요
데이터베이스 스냅샷은 데이터 페이지 수준에서 작동합니다. 원본 데이터베이스의 페이지를 처음으로 수정하기 전에 원본 페이지가 원본 데이터베이스에서 스냅샷으로 복사됩니다. 스냅샷은 원본 페이지를 저장하여 스냅샷이 만들어질 때 상태 그대로 데이터 레코드를 유지합니다. 처음으로 수정되는 모든 페이지에 대해 동일한 프로세스가 반복됩니다. 데이터베이스 스냅샷의 읽기 작업은 상주 위치에 관계없이 항상 원본 데이터 페이지에 액세스하므로 사용자에게 데이터베이스 스냅샷은 변경되지 않는 것처럼 보입니다.
복사한 원본 페이지를 저장하기 위해 스냅샷은 하나 이상의 스파스 파일을 사용합니다. 처음에 스파스 파일은 기본적으로 사용자 데이터가 없는 빈 파일이며 사용자 데이터에 대한 디스크 공간이 할당되어 있지 않습니다. 원본 데이터베이스에서 점점 더 많은 페이지가 업데이트되면 파일 크기가 증가합니다. 다음 그림에서는 두 가지 대비 업데이트 패턴이 스냅샷 크기에 미치는 영향을 보여 줍니다. 업데이트 패턴 A는 스냅샷 수명 동안 원본 페이지의 30%만 업데이트되는 환경을 반영합니다. 업데이트 패턴 B는 스냅샷 수명 동안 원본 페이지의 80%가 업데이트되는 환경을 반영합니다.
데이터베이스 스냅샷의 혜택
스냅샷은 보고 용도로 사용할 수 있습니다.
클라이언트는 데이터베이스 스냅샷을 쿼리할 수 있으므로 스냅샷을 만들 때 데이터를 기반으로 보고서를 작성하는 데 유용합니다.
보고서 생성을 위한 기록 데이터 유지 관리
스냅샷은 특정 시점부터 데이터에 대한 사용자 액세스를 확장할 수 있습니다. 예를 들어 회계 분기와 같은 지정된 기간이 끝나는 시점에 데이터베이스 스냅샷을 만들어 향후 보고 시 사용할 수 있습니다. 그런 다음 스냅샷에서 기간 종료 보고서를 실행할 수 있습니다. 디스크 공간이 허용되는 경우 기간 종료 스냅샷을 무기한 유지 관리하여 이러한 기간의 결과에 대한 쿼리를 허용할 수도 있습니다. 예를 들어 조직 성능을 조사합니다.
가용성 목적으로 유지 관리 중인 미러 데이터베이스를 활용하여 보고 작업 오프로드
데이터베이스 미러링과 함께 데이터베이스 스냅샷을 사용하면 미러 서버의 데이터를 보고에 액세스할 수 있도록 할 수 있습니다. 또한 미러 데이터베이스에서 쿼리를 실행하면 보안 주체에 대한 리소스를 확보할 수 있습니다. 데이터베이스 스냅샷에 대한 더 자세한 내용은 데이데이터베이스 미러링 및 데이터베이스 스냅샷(SQL Server)을 참조하세요.
관리 오류에 대한 데이터 보호.
원본 데이터베이스에서 사용자 오류가 발생할 경우 지정된 데이터베이스 스냅샷을 생성했을 때의 상태로 원본 데이터베이스를 되돌릴 수 있습니다. 데이터 손실은 스냅샷 생성 이후의 데이터베이스 업데이트로 제한됩니다.
예를 들어 대량 업데이트 또는 스키마 변경과 같은 주요 업데이트를 수행하기 전에 데이터베이스에서 데이터베이스 스냅샷을 만들어 데이터를 보호합니다. 실수하는 경우 스냅샷을 사용하여 데이터베이스를 스냅샷으로 되돌려 복구할 수 있습니다. 되돌리기는 백업에서 복원하는 것보다 이 목적을 위해 훨씬 더 빠를 수 있습니다. 그러나 나중에 롤아웃할 수는 없습니다.
Important
되돌리는 작업은 오프라인 또는 손상된 데이터베이스에서 작동하지 않습니다. 따라서 데이터베이스를 보호하려면 정기적인 백업을 수행하고 복원 계획을 테스트해야 합니다.
참고 항목
데이터베이스 스냅샷은 원본 데이터베이스에 따라 달라집니다. 따라서 데이터베이스 스냅샷을 사용하여 데이터베이스를 되돌리는 기능은 백업 및 복원 전략을 대체하지 않습니다. 예약된 모든 백업을 수행하는 것은 필수입니다. 원본 데이터베이스를 데이터베이스 스냅샷을 만든 시점으로 복원해야 하는 경우 이 작업을 수행할 수 있는 백업 정책을 구현합니다.
사용자 오류에 대한 데이터 보호
정기적으로 데이터베이스 스냅샷을 만들면 테이블 삭제와 같은 주요 사용자 오류의 영향을 줄일 수 있습니다. 높은 수준의 보호를 위해 대부분의 사용자 오류를 인식하고 응답하는 데 충분한 시간을 포함하는 일련의 데이터베이스 스냅샷을 만들 수 있습니다. 예를 들어 디스크 리소스에 따라 24시간 간격으로 6~12개의 롤링 스냅샷을 유지할 수 있습니다. 그러면 새 스냅샷이 생성될 때마다 가장 오래된 스냅샷을 삭제할 수 있습니다.
사용자 오류로부터 복구하려면 오류 발생 직전의 스냅샷으로 데이터베이스를 되돌리면 됩니다. 되돌리기는 백업에서 복원하는 것보다 이 목적을 위해 훨씬 더 빠를 수 있습니다. 그러나 나중에 롤아웃할 수는 없습니다.
또는 스냅샷의 정보에서 삭제된 테이블 또는 기타 손실된 데이터를 수동으로 재구성할 수 있습니다. 예를 들어 스냅샷에서 데이터베이스로 데이터를 대량 복사하고 데이터를 데이터베이스에 수동으로 다시 통합할 수 있습니다.
참고 항목
데이터베이스 스냅샷을 사용하는 이유는 데이터베이스에 필요한 동시 스냅샷 수, 새 스냅샷을 만드는 빈도 및 유지할 기간을 결정하기 위함입니다.
테스트 데이터베이스 관리
테스트 환경에서는 각 테스트 라운드가 시작될 때 데이터베이스에 동일한 데이터를 포함하도록 테스트 프로토콜을 반복적으로 실행하는 경우에 유용할 수 있습니다. 첫 번째 라운드를 실행하기 전에 애플리케이션 개발자 또는 테스터는 테스트 데이터베이스에 데이터베이스 스냅샷을 만들 수 있습니다. 각 테스트를 실행한 후 데이터베이스 스냅샷을 되돌려 데이터베이스를 이전 상태로 신속하게 반환할 수 있습니다.
용어 및 정의
데이터베이스 스냅샷
데이터베이스(원본 데이터베이스)의 트랜잭션 일치 읽기 전용 고정적 보기입니다.
원본 데이터베이스
데이터베이스 스냅샷의 경우 스냅샷이 만들어진 데이터베이스입니다. 데이터베이스 스냅샷은 원본 데이터베이스에 따라 달라집니다. 데이터베이스의 스냅샷은 데이터베이스와 동일한 서버 instance에 있어야 합니다. 또한 어떤 이유로든 해당 데이터베이스를 사용할 수 없게 되면 모든 데이터베이스 스냅샷도 사용할 수 없게 됩니다.
스파스 파일
필요한 것보다 훨씬 적은 디스크 공간이 필요한 NTFS 파일 시스템에서 제공하는 파일입니다. 스파스 파일은 데이터베이스 스냅샷에 복사된 페이지를 저장하는 데 사용됩니다. 처음 만들 때 스파스 파일은 디스크 공간을 거의 차지하지 않습니다. 데이터가 데이터베이스 스냅샷에 기록되면 NTFS는 디스크 공간을 해당 스파스 파일에 점진적으로 할당합니다.
데이터베이스 스냅샷에 대한 필수 구성 요소
복구 모델을 사용할 수 있는 원본 데이터베이스는 다음 필수 조건을 충족해야 합니다.
서버 instance는 데이터베이스 스냅샷을 지원하는 SQL Server 버전을 실행해야 합니다. 자세한 내용은 SQL Server 2016 버전에서 지원하는 기능을 참조해 주세요.
데이터베이스가 데이터베이스 미러링 세션 내의 미러 데이터베이스가 아닌 한 원본 데이터베이스는 온라인 상태여야 합니다.
가용성 그룹의 모든 주 데이터베이스 또는 보조 데이터베이스에서 데이터베이스 스냅샷 만들 수 있습니다. 복제본 역할은 RESOLVING 상태가 아닌 PRIMARY 또는 SECONDARY여야 합니다.
데이터베이스 동기화 상태가 SYNCHRONIZING 또는 SYNCHRONIZED인 상태에서 데이터베이스 스냅샷을 만드는 것이 좋습니다. 그러나 데이터베이스 동기화 상태가 NOT SYNCHRONIZING인 경우에도 데이터베이스 스냅샷 만들 수는 있습니다.
자세한 내용은 Always On 가용성 그룹이 있는 데이터베이스 스냅샷(SQL Server)를 참조하세요.
미러 데이터베이스에서 데이터베이스 스냅샷을 만들려면 데이터베이스가 동기화된 미러링 상태여야 합니다.
원본 데이터베이스는 확장 가능한 공유 데이터베이스로 구성할 수 없습니다.
SQL Server 2019 이전에는 원본 데이터베이스에 MEMORY_OPTIMIZED_DATA 파일 그룹을 포함할 수 없습니다. 메모리 내 데이터베이스 스냅샷에 대한 지원이 SQL Server 2019에 추가되었습니다.
모든 복구 모델은 데이터베이스 스냅샷을 지원합니다.
원본 데이터베이스에 대한 제한 사항
데이터베이스 스냅샷이 있는 경우 스냅샷의 원본 데이터베이스에 다음 제한 사항이 적용됩니다.
데이터베이스를 삭제, 분리 또는 복원할 수 없습니다.
원본 데이터베이스의 백업은 정상적으로 수행되며 데이터베이스 스냅샷의 영향을 받지 않습니다.
페이지가 업데이트될 때마다 스냅샷에 대한 쓰기 시 복사 작업으로 인해 원본 데이터베이스의 I/O가 증가하여 성능이 저하됩니다.
원본 데이터베이스 또는 스냅샷에서 파일을 삭제할 수 없습니다.
데이터베이스 스냅샷에 대한 제한 사항
데이터베이스 스냅샷에 다음 제한 사항이 적용됩니다.
데이터베이스 스냅샷을 만들고 원본 데이터베이스와 동일한 서버 instance에 유지해야 합니다.
데이터베이스 스냅샷은 항상 전체 데이터베이스에서 작동합니다.
데이터베이스 스냅샷은 원본 데이터베이스에 따라 달라지며 중복 스토리지가 아닙니다. 디스크 오류 또는 기타 유형의 손상으로부터 보호하지 않습니다. 따라서 데이터베이스 스냅샷을 사용하여 데이터베이스를 되돌리는 기능은 백업 및 복원 전략을 대체하지 않습니다. 예약된 모든 백업을 수행하는 것은 필수입니다. 원본 데이터베이스를 데이터베이스 스냅샷을 만든 시점으로 복원해야 하는 경우 이 작업을 수행할 수 있는 백업 정책을 구현합니다.
원본 데이터베이스에서 업데이트되는 페이지가 스냅샷으로 푸시되는 경우 스냅샷이 디스크 공간이 부족하거나 다른 오류가 발생하는 경우 스냅샷은 의심이 되고 삭제해야 합니다.
스냅샷은 읽기 전용입니다. 읽기 전용이므로 업그레이드할 수 없습니다. 따라서 업그레이드 후에는 데이터베이스 스냅샷이 실행 가능하지 않을 것으로 예상됩니다.
model
,master
, 및tempdb
데이터베이스의 스냅샷은 금지됩니다.데이터베이스 스냅샷 파일의 사양은 변경할 수 없습니다.
데이터베이스 스냅샷에서 파일을 삭제할 수 없습니다.
데이터베이스 스냅샷을 백업하거나 복원할 수 없습니다.
데이터베이스 스냅샷은 연결 또는 분리할 수 없습니다.
FAT32 파일 시스템 또는 RAW 파티션에서는 데이터베이스 스냅샷을 만들 수 없습니다. 데이터베이스 스냅샷에 사용되는 스파스 파일은 NTFS 파일 시스템에서 제공합니다.
전체 텍스트 인덱싱은 데이터베이스 스냅샷에서 지원되지 않습니다. 전체 텍스트 카탈로그는 원본 데이터베이스에서 전파되지 않습니다.
데이터베이스 스냅샷은 스냅샷을 만들 때 원본 데이터베이스의 보안 제약 조건을 상속합니다. 스냅샷은 읽기 전용이므로 상속된 사용 권한을 변경할 수 없으며 원본에 대한 사용 권한 변경 내용은 기존 스냅샷에 반영되지 않습니다.
스냅샷은 항상 스냅샷 생성 시 파일 그룹의 상태를 반영합니다. 온라인 파일 그룹은 온라인 상태로 유지되고 오프라인 파일 그룹은 오프라인 상태로 유지됩니다. 더 자세한 내용은 이 주제의 뒷부분에 나오는 "오프라인 파일 그룹이 있는 데이터베이스 스냅샷"를 참조하세요.
원본 데이터베이스가 RECOVERY_PENDING 데이터베이스 스냅샷에 액세스할 수 없게 될 수 있습니다. 그러나 원본 데이터베이스에 대한 문제가 해결되면 해당 스냅샷을 다시 사용할 수 있게 됩니다.
데이터베이스의 NTFS 읽기 전용 또는 NTFS 압축 파일에 대해서는 되돌리기를 지원하지 않습니다. 두 유형의 파일 그룹 중 하나가 포함된 데이터베이스를 되돌리려고 하면 작업이 실패합니다.
로그 전달 구성에서 데이터베이스 스냅샷은 보조 데이터베이스가 아닌 주 데이터베이스에서만 만들 수 있습니다. 주 서버 instance와 보조 서버 instance 간에 역할을 전환하는 경우 주 데이터베이스를 보조 데이터베이스로 설정하려면 먼저 모든 데이터베이스 스냅샷을 삭제해야 합니다.
데이터베이스 스냅샷은 확장 가능한 공유 데이터베이스로 구성할 수 없습니다.
FILESTREAM 파일 그룹은 데이터베이스 스냅샷에서 지원되지 않습니다. FILESTREAM 파일 그룹이 원본 데이터베이스에 있는 경우 데이터베이스 스냅샷에서 오프라인으로 표시되며 데이터베이스 스냅샷은 데이터베이스를 되돌리는 데 사용할 수 없습니다.
참고 항목
데이터베이스 스냅샷에 대해 실행되는 SELECT 문에는 FILESTREAM 열을 지정하지 말아야 합니다. 그렇지 않으면 라는 오류 메시지가 반환됩니다:
Could not continue scan with NOLOCK due to data movement.
읽기 전용 데이터베이스 또는 읽기 전용 스냅샷에 대한 통계가 없거나 유효하지 않을 경우 데이터베이스 엔진은
tempdb
에서 임시 통계를 만들어 유지 관리합니다. 자세한 내용은 통계를 참조하십시오.
디스크 공간 요구 사항
데이터베이스 스냅샷은 디스크 공간을 소모합니다. 데이터베이스 스냅샷이 디스크 공간을 모두 소모한 경우, 의심됨으로 표시하고 스냅샷을 중단해야 합니다. 그러나 원본 데이터베이스는 영향을 받지 않으며 정상적으로 동작이 계속됩니다.
그러나 데이터베이스의 전체 복사본에 비해 스냅샷은 공간 효율이 높습니다. 스냅샷에는 수명 동안 변경되는 페이지에 대한 충분한 storage만 필요합니다. 일반적으로 스냅샷은 제한된 시간 동안 보관되므로 크기는 중요한 문제가 아닙니다.
그러나 스냅샷을 더 오래 유지할수록 사용 가능한 공간을 사용할 가능성이 높아집니다. 스파스 파일이 증가할 수 있는 최대 크기는 스냅샷을 만들 때 해당 원본 데이터베이스 파일의 크기입니다. 데이터베이스 스냅샷이 디스크 공간을 모두 소모한 경우 스냅샷을 삭제해야 합니다.
참고 항목
파일 공간을 제외하고 데이터베이스 스냅샷은 대략 데이터베이스와 같은 양의 리소스를 사용합니다.
오프라인 파일 그룹의 데이터베이스 스냅샷
원본 데이터베이스의 오프라인 파일 그룹은 다음 중 원하는 작업을 수행하려고 할 때 데이터베이스 스냅샷에 영향을 줍니다.
스냅샷 만들기
원본 데이터베이스에 하나 이상의 오프라인 파일 그룹이 있는 경우 오프라인 파일 그룹의 스냅샷 만들기가 성공합니다. 오프라인 파일 그룹의 경우 스파스 파일이 생성되지 않습니다.
파일 그룹을 오프라인으로 전환
원본 데이터베이스에서 파일을 오프라인으로 전환할 수 있습니다. 그러나 파일 그룹은 스냅샷을 만들 때 온라인인 경우 데이터베이스 스냅샷에서 온라인 상태로 유지됩니다. 스냅샷을 만든 후 쿼리한 데이터가 변경된 경우 스냅샷에서 해당 원본 데이터 페이지에 액세스할 수 있습니다. 그러나 스냅샷을 사용하여 파일 그룹의 수정되지 않은 데이터에 액세스하는 쿼리는 입출력(I/O) 오류로 실패할 수 있습니다.
온라인 파일 그룹 가져오기
데이터베이스 스냅샷이 있는 데이터베이스에서는 파일 그룹을 온라인 상태로 만들 수 없습니다. 스냅샷을 만들 때 파일 그룹이 오프라인 상태이거나 데이터베이스 스냅샷이 있는 동안 오프라인 상태인 경우 파일 그룹은 오프라인 상태로 유지됩니다. 파일을 다시 온라인 상태로 만들려면 복원해야 하므로 데이터베이스에 데이터베이스 스냅샷이 있는 경우에는 복원할 수 없습니다.
원본 데이터베이스를 스냅샷으로 되돌리기
원본 데이터베이스를 데이터베이스 스냅샷으로 되돌리려면 스냅샷을 만들 때 오프라인 상태였던 파일 그룹을 제외하고 모든 파일 그룹이 온라인 상태여야 합니다.