데이터베이스 스냅숏 작동 방법
데이터베이스 스냅숏은 커밋되지 않은 트랜잭션을 제외하고 스냅숏을 작성할 때 상태 그대로 원본 데이터베이스의 읽기 전용 정적 뷰를 제공합니다. 데이터베이스 엔진에서 스냅숏이 생성된 후 복구를 실행하기 때문에 커밋되지 않은 트랜잭션은 새로 만든 데이터베이스 스냅숏에서 롤백됩니다. 데이터베이스의 트랜잭션은 영향을 받지 않습니다.
데이터베이스 스냅숏은 원본 데이터베이스에 따라 달라집니다. 데이터베이스 스냅숏은 데이터베이스와 동일한 서버 인스턴스에 있어야 합니다. 또한 어떤 이유에서든 데이터베이스를 사용할 수 없게 되면 해당 데이터베이스 스냅숏도 모두 사용할 수 없습니다.
스냅숏은 보고 용도로 사용할 수 있습니다. 또한 원본 데이터베이스에서 사용자 오류가 발생할 경우 스냅숏을 생성했을 때의 상태로 원본 데이터베이스를 되돌릴 수 있습니다. 데이터 손실은 스냅숏 생성 이후의 데이터베이스 업데이트로 제한됩니다. 또한 스키마 또는 테이블 구조 변경과 같이 데이터베이스에 주요 변경 사항을 적용하기 전에 바로 데이터베이스 스냅숏을 만드는 것이 유용할 수 있습니다. 스냅숏 사용법은 데이터베이스 스냅숏의 일반적 사용법을 참조하십시오.
스냅숏을 사용하기 위해 반드시 스냅숏 작동 방식을 알아야 하는 것은 아니지만 알아 두면 도움이 됩니다. 데이터베이스 스냅숏은 데이터 페이지 수준에서 작동합니다. 원본 데이터베이스의 페이지를 처음 수정하기 전에 원본 페이지는 원본 데이터베이스에서 스냅숏으로 복사됩니다. 이 프로세스를 쓰기 시 복사 작업이라고 합니다. 스냅숏은 원본 페이지를 저장하여 스냅숏이 만들어질 때 상태 그대로 데이터 레코드를 유지합니다. 수정된 페이지에 있는 레코드의 후속 업데이트는 스냅숏 내용에 영향을 주지 않습니다. 처음 수정하는 모든 페이지에 같은 프로세스가 반복됩니다. 이런 방법으로 스냅숏은 스냅숏이 사용된 이후에 수정된 원본 페이지의 모든 데이터 레코드를 유지합니다.
복사된 원본 페이지를 저장하기 위해 스냅숏은 하나 이상의 스파스 파일을 사용합니다. 처음에 스파스 파일은 기본적으로 사용자 데이터가 없는 빈 파일이며 사용자 데이터에 대한 디스크 공간이 할당되어 있지 않습니다. 원본 데이터베이스에서 페이지를 업데이트할수록 파일 크기가 증가합니다. 스냅숏을 사용할 때 스파스 파일은 디스크 공간을 거의 차지하지 않습니다. 그러나 데이터베이스를 업데이트할수록 스파스 파일은 상당히 큰 용량으로 증가할 수 있습니다. 스파스 파일에 대한 자세한 내용은 데이터베이스 스냅숏의 스파스 파일 크기 이해를 참조하십시오.
다음 그림은 쓰기 시 복사 작업에 대해 설명합니다. 스냅숏 다이어그램의 밝은 회색 사각형은 아직 할당되지 않은 스파스 파일에 사용할 수 있는 공간을 나타냅니다. 원본 데이터베이스의 페이지에 대한 첫 업데이트를 받으면 데이터베이스 엔진은 파일에 쓰고 운영 체제는 스냅숏의 스파스 파일에 공간을 할당하고 원본 페이지를 그 공간으로 복사합니다. 그런 다음 데이터베이스 엔진은 원본 데이터베이스의 해당 페이지를 업데이트합니다. 다음 그림은 쓰기 시 복사 작업의 예를 보여 줍니다.
중요 |
---|
데이터베이스 스냅숏은 중복 저장소가 아니기 때문에 디스크 오류나 다른 유형의 손상에 대해 보호하지 않습니다. 데이터베이스를 보호하려면 정기적으로 백업하고 복원 계획을 테스트해야 합니다. 데이터베이스 스냅숏을 만든 시점까지 원본 데이터베이스를 복원해야 하는 경우 이 작업을 수행할 수 있는 백업 정책을 구현합니다. |
데이터베이스 스냅숏의 읽기 작업
사용자에게 데이터베이스 스냅숏은 변경되지 않는 것으로 보입니다. 데이터베이스 스냅숏의 읽기 작업은 원본 데이터 페이지의 위치에 관계없이 항상 원본 데이터 페이지에 액세스하기 때문입니다.
페이지가 아직 원본 데이터베이스에 대해 업데이트되지 않은 경우 스냅숏의 읽기 작업은 원본 데이터베이스의 원본 페이지를 읽습니다. 다음 그림은 새로 만들어져서 스파스 파일에 페이지가 포함되지 않은 스냅숏의 읽기 작업을 보여 줍니다. 이 읽기 작업은 원본 데이터베이스에서만 읽습니다.
페이지가 업데이트된 다음 스냅숏의 읽기 작업은 이제 스파스 파일에 저장되어 있는 원본 페이지에 계속 액세스합니다. 다음 그림은 원본 데이터베이스의 페이지가 업데이트된 다음 해당 페이지에 액세스하는 스냅숏의 읽기 작업을 보여 줍니다. 읽기 작업은 스냅숏의 스파스 파일에서 원본 페이지를 읽습니다.
데이터베이스 스냅숏 증가에 대한 업데이트 패턴의 영향
원본 데이터베이스가 상당히 커서 디스크 공간 사용에 대해 우려될 경우에는 일정 시점에 이전 스냅숏을 새 스냅숏으로 바꿔야 합니다. 스냅숏의 이상적인 수명은 스냅숏의 증가 속도와 스파스 파일에 대해 사용할 수 있는 디스크 공간에 따라 달라집니다. 스냅숏에 필요한 디스크 공간은 스냅숏 수명 동안 원본 데이터베이스에서 업데이트된 페이지 수에 따라 결정됩니다. 따라서 반복적으로 업데이트되는 작은 페이지 하위 집합에 대한 업데이트가 대부분인 경우 시간이 지날수록 증가 속도는 느려지고 필요한 스냅숏 공간은 상대적으로 작아지게 됩니다. 이와 반대로 모든 원본 페이지가 결국 최소한 한 번 업데이트되면 스냅숏은 원본 데이터베이스 크기만큼 증가합니다. 디스크가 꽉 차기 시작하면 스냅숏은 서로 디스크 공간을 차지하려고 합니다. 디스크 드라이브가 꽉 차면 모든 스냅숏의 쓰기 작업이 실패합니다.
[!참고]
스냅숏의 실제 및 잠재적 크기를 확인하는 방법은 데이터베이스 스냅숏의 스파스 파일 크기 이해를 참조하십시오.
따라서 스냅숏의 예상 수명 동안 필요한 공간을 계획할 때 데이터베이스의 일반 업데이트 패턴을 알고 있는 것이 유용합니다. 일부 데이터베이스의 경우 업데이트 속도는 거의 일정해야 합니다. 예를 들어 재고 데이터베이스에서는 많은 페이지가 매일 업데이트되므로 이전 스냅숏을 매일 또는 매주 바꾸는 것이 유용합니다. 다른 데이터베이스의 경우 업데이트된 페이지 부분은 업무 주기에 따라 달라질 수 있습니다. 예를 들어 카탈로그 데이터베이스는 주로 분기별로 업데이트되고 나머지 시간에는 가끔 업데이트되므로 각 분기별 업데이트가 논리 전략이 되기 전과 후에만 스냅숏을 만듭니다. 사전 업데이트 스냅숏은 중대한 업데이트 오류가 발생할 경우 되돌리기가 허용되고 사후 업데이트 스냅숏은 다음 분기 동안 쓰기를 보고하는 데 사용될 수 있습니다.
다음 그림은 스냅숏 크기에 대한 두 가지 상반된 업데이트 패턴의 효과를 보여 줍니다. 업데이트 패턴 A는 스냅숏 수명 동안 원본 페이지의 30%가 업데이트되는 환경을 반영합니다. 업데이트 패턴 B는 스냅숏 수명 동안 원본 페이지의 80%가 업데이트되는 환경을 반영합니다.
데이터베이스 스냅숏에 대한 메타데이터
데이터베이스 스냅숏에 대한 데이터베이스 메타데이터에는 source_database_id 속성이 포함됩니다. 이 속성은 sys.databases 카탈로그 뷰의 열에 저장되어 있습니다. 이 속성에 대한 자세한 내용은 sys.databases(Transact-SQL)를 참조하십시오.
일반적으로 데이터베이스 스냅숏은 고유의 메타데이터를 노출하지 않지만 원본 데이터베이스의 메타데이터는 노출합니다. 예를 들어 이 메타데이터에는 다음 문이 반환하는 데이터가 포함됩니다.
USE <database_snapshot> SELECT * FROM sys.database_files
여기서 <database_snapshot>은 데이터베이스 스냅숏 이름입니다.
유일한 예외는 원본 데이터베이스에서 전체 텍스트 검색이나 데이터베이스 미러링을 사용하는 경우로, 스냅숏의 일부 메타데이터 값이 변경되어 스냅숏에서 원본 데이터베이스를 사용할 수 없게 됩니다.