SNAPSHOT을 이용한 SQL Server 복원

 

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

 

데이터베이스를 운영하다 보면 데이터베이스 복원 이슈가 발생한다. 이때 백업파일이나 트랜잭션 로그 파일이 없다면 어떻게 복원할까? 스냅샷이 있다면 스냅샷의 시점으로 복원이 가능하다. 스냅샷의 정의를 간단히 정리하면 현재 데이터베이스 상태를 사진을 찍듯이 새로운 복사본으로 찍는다고 이해하면 될 듯 하다.

데이터베이스 스냅샷은 Enterprise, Developer 에디션에서만 가능하다.

 

현재 데이터베이스의 테이블을 확인 하자. 실습용 데이터베이스(SW_TEST)의 TBL_A 테이블안에 602개의 데이터가 있음을 확인 할 수 있다.

 

데이터베이스 스냅샷을 생성하자.

CREATE DATABASE SW_TEST_SNAPSHOT

ON

(NAME = SW_TEST,

FILENAME = 'D:\SQL_DATA\SW_TEST_SNAP.SNAPSHOT')

AS SNAPSHOT OF SW_TEST

GO

 

 

 

스냅샷이 생성되면 현재 데이터베이스의 MDF와 같은 크기의 사이즈로 스냅샷이 생성된 것을 확인 할 수 있다.

 

 

스냅샷 생성이 완료 되었으면 데이터베이스의 데이터를 삭제 하자. 데이터를 삭제하고 나니 602건의 데이터가 0건으로 모두 삭제 되었다.

 

 

스냅샷 데이터베이스로 이동하여 데이터를 조회해 보자. 스냅샷에는 스냅샷 생성 시점의 데이터 602건이 있음을 확인 할 수 있다.

 

 

스냅샷을 이용한 데이터베이스를 복원하기 전 복원하려는 원본 데이터베이스에 몇 개의 스냅샷이 있는지 확인 한다. 그리고 복원하려는 스냅샷 외에의 다른 스냅샷은 모두 삭제하여야 한다.

SELECT * FROM SYS.DATABASES WHERE SOURCE_DATABASE_ID = DB_ID()

 

 

 

스냅샷을 이용하여 복원을 진행하자. 복원 방법은 기존의 백업파일을 이용한 복원 방법과 거의 유사하다. 다만 디스크의 백업 파일 대신 스냅샷을 경로를 입력 하면 된다.

USE MASTER

GO

 

RESTORE DATABASE SW_TEST FROM DATABASE_SNAPSHOT = 'SW_TEST_SNAPSHOT'

GO

 

USE SW_TEST

GO

 

SELECT * FROM TBL_A

 

 

스냅샷을 이용하여 스냅샷 시점의 데이터 복원을 완료 하였다.

 

전체 백업파일과 트랜잭션로그 백업파일을 이용하면 다양한 옵션을 사용한 복원이 가능하지만 백업파일이 없을 경우 해당 시점의 스냅샷이 있는 경우 활용하면 매우 유용할 듯 하다.



강성욱 / 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 20075
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 12120
1674 복사 전용 백업(COPY ONLY BACKUP) jevida(강성욱) 2016.09.13 3978
1673 SQL Server 기본 백업 폴더 변경하기 jevida(강성욱) 2016.09.13 4145
1672 sp_helpindex 의 향상된 버전 minsouk 2016.05.17 4592
1671 Spatial Index (공간 인덱스) 생성, 수정, 삭제 jevida(강성욱) 2016.01.11 9726
1670 Spatial Indexing 개요 (공간 인덱스) jevida(강성욱) 2016.01.11 7563
1669 Event Session을 이용한 Session Health check jevida(강성욱) 2016.01.11 6953
1668 SQL Server 2012 XML 플랜을 통한 병렬화 되지 않는 이유 살펴보기 jevida(강성욱) 2016.01.11 7542
1667 Event Session을 이용한 SQL OS Session Schedule check jevida(강성욱) 2016.01.11 7325
1666 Event Session을 이용한 Memory Health check jevida(강성욱) 2016.01.11 6977
1665 Event Session을 이용한 CPU Health check jevida(강성욱) 2016.01.11 8485
1664 DMV를 이용한 I/O Health check jevida(강성욱) 2016.01.11 7372
1663 CONCAT 함수 (문자열 연결하기)와 주의 사항 jevida(강성욱) 2016.01.11 28153
1662 SQL Server 2012 Columnstore Index jevida(강성욱) 2016.01.11 7607
1661 SQL Server 2012 File Stream / Table 관련 DMV jevida(강성욱) 2016.01.11 4913
1660 SQL Server2012 DMV – 메모리 덤프, 서비스, 구성 확인 jevida(강성욱) 2016.01.11 4834
1659 SQL Server2012 향상된 디버깅 기능 jevida(강성욱) 2016.01.11 4416
1658 SQL Server2012 매개 변수 구성 jevida(강성욱) 2016.01.11 3527
1657 SQL Server2012 도움말 설치 jevida(강성욱) 2016.01.11 3499
1656 SQL Server2012 Checkpoint 제어 jevida(강성욱) 2016.01.11 5397
1655 SSIS 패지키의 메타데이터 유효성 검사 중지하기 jevida(강성욱) 2016.01.11 3015





XE Login