통합 테스트를위한 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.