Entegrasyon testi için SQL Server veritabanı anlık görüntüleri


14

Bizim entegrasyon testi için bir test veritabanı (SQL Server'da) ile çalışma bir yol tanımlamak çalışıyorum.

Benim fikrim, entegrasyon testi montajının başlangıcında şu adımları yapmaktı:

  • tamamen boş bir veritabanı oluştur
  • ilgili tüm veritabanı nesnelerini (tablo, görünümler, diziler vb.) oluşturmak için "veritabanı nesneleri oluştur" komut dosyasını çalıştırın
  • "temel verileri" doldur (arama değerleri vb.)
  • (db)_Basisgelecekteki entegrasyon testleri için "temel çizgi" olarak adlandırılan bir veritabanı anlık görüntüsü alın

Şimdi her test sınıfından önce (1-n testleri içeren), veritabanının iyi tanımlanmış, az çok "boş" durumuna geri dönmek için basitçe bir "anlık görüntüden geri yükleme" yapmayı planlıyordum. Şimdiye kadar bir cazibe gibi çalışıyor.

Ancak, büyük bir test veritabanında çalışması gereken bir dizi entegrasyon testi vardır - bu yüzden bu test fikstürlerinin her biri (n bireysel testli sınıflar) önce bunu yapmayı umuyordum

  • veritabanını (db)_Basisanlık görüntüden geri yükle
  • bu 50.000'den fazla veri satırını veritabanına ekleyin
  • başka bir anlık (db)_With_Testdatagörüntü oluştur

ve sonra her test için, veritabanını iyi tanımlanmış (db)_With_Testdataanlık görüntü sürümüne sıfırlayın , testleri çalıştırın, sonucu doğrulayın vb.

Sorun: Aynı anda iki db anlık görüntüleri var gibi görünmüyor - bir kez yaptıktan sonra, bunlardan herhangi birine benim veritabanı geri yükleyemiyorum .... Bu hatayı almaya devam:

Msg 3137, Seviye 16, Durum 4, Satır 9
Veritabanı geri alınamaz. Birincil veya anlık görüntü adları yanlış belirtilmiş, diğer tüm anlık görüntüler bırakılmamış veya eksik dosyalar var.

Msg 3013, Seviye 16, Durum 1, Satır 9
VERİTABANI GERİ YÜKLE anormal olarak sonlanıyor.

Gerçekten SQL Server veritabanı anlık görüntüleri nasıl çalışır ?? Çok kısıtlayıcı görünüyor ..... Doğrudan orijinal "(db) _Basis" anlık görüntüsüne geri dönemezsem anlayabilirdim, ama sadece iki anlık görüntüm olduğu için, en son görüntüye bile geri dönemem ?!?!?


Ne kadar süre takın 50.000 satır bölüm take? Bunun yerine tekrar başvurabilir misiniz?
RBarryYoung

Yanıtlar:


12

Ne yazık ki, tasarım gereği.

" Bir Veritabanını Veritabanı Anlık Görüntüsüne Döndür " sayfasından alınan BOL sayfası :

Sınırlamalar ve Kısıtlamalar

Geri döndürme aşağıdaki koşullarda desteklenmez:

  • Veritabanının şu anda geri almayı planladığınız yalnızca bir veritabanı anlık görüntüsü olmalıdır .
  • Veritabanında salt okunur veya sıkıştırılmış dosya grupları vardır.
  • Artık tüm dosyalar çevrimdışı ancak anlık görüntü oluşturulduğunda çevrimiçiydi

Alternatif olarak, ilk anlık görüntüyü bırakabilirsiniz (db)_Basis. Bunun çok sınırlayıcı göründüğünü anlayabiliyorum, ancak şu şekilde bakın: anlık görüntüler orijinal veri dosyalarına dayanan seyrek dosyalardır, bu nedenle belirli bir anlık görüntüye geri dönmek tüm anlık görüntüleri geçersiz kılar (temel veri dosyaları geri alma işlemi tarafından değiştirilir) . Sınırlama can sıkıcı olabilir, ancak mantıksız görünmüyor.


4

Başka bir bakış açısı, yedekleri alıp geri yüklemek olacaktır .

Ayrıca, sadece 50K satır ekleyerek, veritabanı o kadar büyük olmaz. Sıkıştırma kullanırsanız, yedekleme boyutu da daha az olacaktır.

Bir TSQL Agent işiniz veya sadece komut dosyalarınız olabilir (saklı yordam oluşturabilir ve aldığınız çıktıya dayalı testlerinizden sonra arayabilirsiniz).

  • Temel yedekleme - (db)_Basis
  • Test verileri yedeklemesi ile - (db)_With_Testdata

entegrasyon komut dosyalarınızın çalışmasını sağlayın ve son çıktıya göre, istediğiniz noktaya geri dönmek için yukarıdaki işlerden birini çalıştırabilirsiniz.

Veritabanı anlık görüntü sınırlaması vurduğunuz için yedekleme / geri yükleme yönteminin senaryoda çok zarif olduğunu hissediyorum . Ayrıca, Paul Randal SQL Server 2012'ye kadar olan tüm sürümlerde kötü bir hata hakkında blog yazdı (daha sonraki bir CU'da düzeltilip düzeltilmediğinden emin değilim)

Veritabanı anlık görüntüsüne geri döndüğünüzde, kaynak veritabanının işlem günlüğü dosyası yırtılır ve iki adet 0,25 MB VLF ile 0,5 MB günlük dosyasıyla değiştirilir.


Evet, yedekleme / geri yükleme kullanıyoruz - ancak 5-7 saniye aralığında bir veritabanı anlık görüntüsünden geri yükleme 1 saniyenin çok altında - bu yüzden yedekleme / geri yükleme için bir alternatif arıyoruz
marc_s

@marc_s Benim için 5-7 sn sınırlamalar ve hatalar vs 1 sn sınırlamalar ve olası hatalar ile kabul edilebilir :-)
Kin Shah

Bize göre bu olduğunu değil kabul edilebilir - biz daha çabuk çözüm arıyorsanız
Marc_s

@marc_s ben anliyorum değil kabul edilebilir. Ama zaten tasarımın sınırına ulaşıyorsunuz. Yalnızca 1 anlık görüntü kullanabilirsiniz, ancak geri dönmek için yine de yedeklemeye ihtiyacınız vardır. Seçim sizin - örneğin test verilerinizle birlikte tek bir anlık görüntü kullanın ve temel verilere geri yüklemek için yedeklemeyi kullanın.
Kin Şah
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.