통합 테스트를위한 SQL Server 데이터베이스 스냅 샷


14

통합 테스트를 위해 SQL Server의 테스트 데이터베이스를 사용하는 방법을 정의하려고합니다.

내 생각은 통합 테스트 어셈블리를 시작할 때 다음 단계를 수행하는 것이 었습니다.

  • 완전히 빈 데이터베이스를 만듭니다
  • "데이터베이스 오브젝트 작성"스크립트를 실행하여 모든 관련 데이터베이스 오브젝트 (테이블, 뷰, 시퀀스 등)를 작성하십시오.
  • "기본 데이터"(조회 값 등)를 채 웁니다.
  • (db)_Basis향후 통합 테스트를 위해 "베이스 라인" 이라고하는 데이터베이스 스냅 샷 작성

이제 모든 테스트 클래스 (1-n 테스트 포함) 이전에 데이터베이스의 잘 정의 된 "빈"상태로 돌아 가기 위해 "스냅 샷에서 복원"을 간단히 수행하려고했습니다. 지금까지 매력처럼 작동합니다.

그러나 대규모 테스트 데이터베이스에서 작동 해야하는 통합 테스트 세트가 있으므로 각 테스트 픽스처 (n 개의 개별 테스트가있는 클래스) 전에이 작업을 수행하기를 희망했습니다

  • (db)_Basis스냅 샷 에서 데이터베이스를 복원
  • 50,000 개가 넘는 데이터 행을 데이터베이스에 삽입
  • 다른 스냅 (db)_With_Testdata샷 스냅 샷 생성

그런 다음 각 테스트에 대해 데이터베이스를 정의 된 (db)_With_Testdata스냅 샷 버전으로 재설정 하고 테스트를 실행하고 결과 등을 확인하십시오.

문제는 : 동시에 두 개의 DB 스냅 샷 을 가질 수없는 것 같습니다. 일단 그렇게하면 데이터베이스를 이들 중 하나에 복원 할 수 없습니다 ....이 오류가 계속 발생합니다.

메시지 3137, 수준 16, 상태 4, 줄 9
데이터베이스를 되돌릴 수 없습니다. 기본 또는 스냅 샷 이름이 잘못 지정되었거나 다른 모든 스냅 샷이 삭제되지 않았거나 파일이 누락되었습니다.

메시지 3013, 수준 16, 상태 1, 줄 9
RESTORE DATABASE가 비정상적으로 종료됩니다.

이것이 실제로 SQL Server 데이터베이스 스냅 샷의 작동 방식입니까? 끔찍하게 제한하는 것 같습니다 ..... 원래 "(db) _Basis"스냅 샷으로 직접 되돌릴 수없는 경우 이해할 수 있습니다. 그러나 이제 두 개의 스냅 샷이 있기 때문에 가장 최근의 스냅 샷으로 돌아갈 수도 없습니다. ?!?!?


50,000 행 삽입에 시간이 얼마나 걸립 니까? 대신 다시 적용 할 수 있습니까?
RBarryYoung

답변:


12

불행히도, 그것은 의도적으로 설계된 것입니다.

BOL 페이지 " 데이터베이스 스냅 샷으로 데이터베이스 되돌리기 "에서 가져온 것 :

제한 및 제한

다음과 같은 조건에서는 되돌리기가 지원되지 않습니다.

  • 데이터베이스에는 현재 되돌릴 데이터베이스 스냅 샷이 하나만 있어야합니다 .
  • 읽기 전용 또는 압축 파일 그룹이 데이터베이스에 존재합니다.
  • 이제 모든 파일이 오프라인 상태이지만 스냅 샷을 만들 때 온라인 상태였습니다

대안으로 첫 번째 스냅 샷을 삭제할 수 (db)_Basis있습니다. 스냅 샷은 원본 데이터 파일을 기반으로 스파 스 파일이므로 특정 스냅 샷으로 되 돌리면 모든 스냅 샷이 무효화됩니다 (기본 데이터 파일은 되돌리기 작업으로 변경됨). . 이 제한은 성가신 일이지만 부당한 것은 아닙니다.


4

조회 값을 가진 빈 데이터베이스와 스키마를 작성하기 때문에 백업 을 수행 하고 복원 하는 것이 또 다른 관점입니다 .

또한 50K 행을 삽입하면 데이터베이스가 그렇게 크지 않습니다. 압축을 사용하면 백업 크기도 줄어 듭니다.

TSQL 에이전트 작업이나 스크립트 만있을 수 있습니다 (저장 프로 시저를 작성하고 테스트 결과를 바탕으로 테스트 후 호출 할 수 있음).

  • 기본 백업- (db)_Basis
  • 테스트 데이터 백업으로- (db)_With_Testdata

통합 스크립트를 실행하고 최종 출력을 기반으로 위의 작업 중 하나를 실행하여 원하는 지점으로 되돌릴 수 있습니다.

데이터베이스 스냅 샷 제한에 도달했기 때문에 백업 / 복원 방법이 시나리오에서 훨씬 우아하다고 생각합니다 . 또한 Paul Randal은 SQL Server 2012까지의 모든 버전에서 불쾌한 버그에 대해 블로그 했습니다 (나중에 CU로 수정되었는지 확실하지 않음)

데이터베이스 스냅 샷으로 되 돌리면 소스 데이터베이스의 트랜잭션 로그 파일이 제거되고 두 개의 0.25MB VLF가있는 0.5MB 로그 파일로 바뀝니다.


하지만 잘 아래 1 초 데이터베이스 스냅 샷 복원하는 동안 5-7 초 그의는, 범위 - - 우리가 백업에 대한 대안을 찾는 이유 / 복원 예, 우리는 백업 / 복원을 사용하고
marc_s을

@marc_s 나에게 5-7 초는 제한과 버그없이 허용되며 1 초는 제한과 가능한 버그가 있습니다 :-)
Kin Shah

우리에게, 그 것이다 되지 허용 - 우리가 빠른 솔루션을 찾고있어
marc_s

@marc_s 나는대로 지점을 볼 수 없습니다 허용. 그러나 이미 설계 상 한계에 도달했습니다. 스냅 샷을 하나만 사용할 수 있지만 되돌리려면 여전히 백업이 필요합니다. 테스트 데이터와 함께 단일 스냅 샷을 사용하고 백업을 사용하여 기본 데이터로 복원하십시오.
Kin Shah
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.