İki farklı şema arasında veri karşılaştırması yapmak için araçlar var mı?


11

Veritabanımızı yeni bir şemaya taşıyoruz ancak verilerin doğru taşındığını doğrulamak istiyoruz.

Geleneksel veri karşılaştırma araçları, şemalar aynıysa iki veritabanını farklılıklar için karşılaştırabilir. Bizim durumumuzda tablo tasarımlarında değişiklikler oldu, ancak eski şemadaki tüm veriler yeni olanda, sadece biraz taşındı ve doğru olduğundan emin olmalıyım. On milyonlarca satıra sahibiz, bu yüzden manuel inceleme bir seçenek değil.

Bu tür karşılaştırmaya yardımcı olabilecek herhangi bir araç var mı?

Değilse, özel bir çözüm geliştirmeye başlamak için yardımcı olabilecek herhangi bir kütüphane / çerçeve var mı?

Gerekirse, bu durumda SQL Server 2008 için veritabanına özel bir çözüm kullanmaktan mutluluk duyuyorum.

Benim çözüm:VIEW Eski veritabanı üzerinde her tabloyu yeni veritabanı tablosu ile aynı alanlarla oluşturarak iki veri kümelerini karşılaştırıyorum .

Daha sonra burada açıklanan tekniği kullanarak verileri karşılaştırmak: SQL Server: UNION iki tablo karşılaştırmak için en kısa, en hızlı ve en kolay yolu!

Genel tablo yapısı eski veritabanına benzer, alanları bir tablodan diğerine taşındı, düştü veya eklendi gibi bu geçiş şanslıyım. Bırakılan ve eklenen durumda karşılaştırılacak hiçbir şey yoktur, taşınan veya toplanan alanlar için karşılaştırma için doğru bilgileri sağlamak amacıyla görünümde hesaplamalar yaparım.

UNIONKarşılaştırma gösterileri bana farklılıkları satırları, bu nedenle en kısa sürede verilerin doğru olduğu gibi boş bir sonuç kümesi olsun.


1
Şemalar değiştiyse verilerin doğru olduğunu nasıl bileceksiniz? Bir tablo bölünmüşse veya birleştirilmişse vb?
gbn


@AaronBertrand - Yorumunuz için teşekkürler, ancak o zaman (3 yıl önce) bunun için araçların kullanılabilirliğini araştırdım, ancak farklı şemalar arasında bir karşılaştırma yapacak hiçbir şey bulamadım . Bağlantınızın hala ihtiyacım olduğu için satın alabileceğim bir araç olduğunu umuyordum.
Tony

@ Bunu kesinlikle Red-Gate'in aracıyla yapabilirsiniz (diğerlerinden emin değilsiniz), sadece manuel haritalama yapmanız yeterlidir.
Aaron Bertrand

@Tony Farklı şemalar, aynı veritabanı? Veya farklı şemalar, farklı veritabanları?
Aaron Bertrand

Yanıtlar:


7

İki farklı şemayı karşılaştırmak imkansız değil, sonuçta ne kadar emin olduğunuzun bir hesaplaması . Esasen Banka Mutabakat tekniklerinden ödünç aldım

Önemli: Bu mutabakat, hedefin veri bağlamındaki kaynakla tam olarak eşleştiğinden emin olmakla ilgili değildir (yeni bir sisteme geçişinizin bir nedeni vardır), ancak herhangi bir tutarsızlığı açıklamanız gerekir!

Esası:

  1. Ölçmek için kullanacağınız metrikleri tanımlayın (yani: toplam kullanıcı sayısı, tüm yaşlarının toplamı, kullanıcı kimliklerinin listesi ve posta kodları ...) Aşağıdakilerden birkaç ölçüm kullanmaya çalışıyorum: Toplamlar, Ortalamalar ve örnek / ayrıntılı kayıtlar
  2. Bu verileri ortak bir konuma boşaltın (görünümler / raporlar / makul olan her şeyle)
  3. Verilerinizi karşılaştırın ve herhangi bir tutarsızlığın açıklanabileceğinden emin olun

Genellikle karşılaştırmayı çeşitli yöntemlere böldüm (özellikle ayrıntılı metrikler için):

  • Tabloya göre: Genellikle Kaynak Tablo'yu tanım olarak kullanarak, Kaynak Tablo Verilerini denemek ve yeniden oluşturmak için hedef DB'de bir dizi görünüm oluşturmak
  • Nesneye Göre: DB'ye ve ne depoladığınıza bağlı olarak, birkaç tablo boyunca nesnelerin (yani: kullanıcının) bütünsel bir görünümünü oluşturmak , yukarıdaki gibi bir nesneyi döndürmek için bir dizi görünüm oluşturmak gibi daha mantıklı olabilir. sonuç kümesi
  • Raporlara göre: Kaynak DB'nin kapsamlı kapsamlı Yönetim Raporları kümesi varsa, başka bir teknik de bu raporları tam olarak aynı biçimlendirmeyle yeniden oluşturmaktır

Teknikler:

Karşılaştırılacak şeyi üretmek için hangi yöntemi kullandığım önemli değil, uzlaştırılabilir Kaynak ve Hedef verilerini tutan bir dizi dosya / görünüm / dbs ile sonuçlanırım, daha sonra ortama bağlı olarak yaygın olarak kullanılan araçlardan birini kullanabilirim karşılaştırmak için. Kendi tercihlerim:

  1. Dosya Karşılaştırma
    SourceDB ve DestinationDB için iki farklı klasör oluşturun (zaman / sürüm damgalı, böylece mutabakatı ne zaman yaptığımı biliyorum) ve metriklerimin çıktısını ilgili olarak adlandırılmış dosyalar olarak döktükten sonra farklılıkları tanımlamak için bir karşılaştırma aracı ( CSDiff gibi ) kullanın

  2. Excel Karşılaştırma
    Özellikle Yönetim raporlarıyla uğraşırken, raporları karşılaştırmak için bir dizi çalışma kitabı Excel oluşturacağım (özünde VLookup'lardan yararlanma ve toplamları karşılaştırma)

  3. Veri Karşılaştırma
    Mutabakat verilerini dosyalara veya raporlara çıktılamak yerine, bunları ayrı DB'lere çıktılayın, sonra DB'leri karşılaştırmak için Redgate SQL Veri Karşılaştırması gibi bir şey kullanın

Diğer Aletler:

Bunlardan hiçbirini denemedim, ancak 'Veri mutabakat araçları' üzerinde hızlı bir Google araması şunları sağlar:

Başkaları da var, ama bunlar makul görünenlerdi


Önerileriniz için teşekkürler. Dediğiniz gibi, şu anda imkansız değil (şu anda bir çözüm üzerinde çalışıyorum) sadece zor. Bahsettiğin yöntemlere bakacağım.
Tony

Endişeye gerek yok @Tony, bulduğum hile, daha küçük adımlara ayırmaya çalışmak ve daha sonra her adım için mevcut araçları bulmak (bazı özel şeyler yazmanız gerekecek, mümkün olduğunda bu çabayı en aza indirgemek)
Andrew Bickerton

6

İki farklı veritabanı tasarımındaki verileri karşılaştırmak isterseniz, verileri karşılaştırmak için el kodlu SQL yazmanız gerekir.

  • Bir tablo bölünmüşse veya birleştirilmişse vb?
  • Tarih saatiniz olsaydı, artık küçük tarihiniz var = veriler farklı olacak
  • ...

İki farklı veri tabanında aynı olup olmadığını kontrol etmek için bir çerçeve kütüphanesi yoktur.

Neyi değiştirdiğinizi veya değiştirdiğinizi yalnızca siz biliyorsunuz


Çok korktum ama birisinin böyle bir karşılaştırma yapması durumunda soracağımı düşündüm. Sorgu yazmayı hızlandıracak bir araç olabileceğini umuyordum, ancak dediğin gibi, muhtemelen sıfırdan bir şeyler yazmak zorunda kalacağım.
Tony

1
@Tony: evet: çünkü herhangi bir araç "yanlış olanı" "değiştirdiğimiz
şeyden

5

Farklı şemaları karşılaştırmanız imkansız olacaktır. Sorununuzu çözmek için hangi verileri karşılaştırmanız gerektiğini anladım. Daha sonra karşılaştırmak istediğim verileri geri çekecek her sunucuda bir görünüm oluşturacaktım (veri türlerini ve bu türleri dikkate alın).

Her iki görünüm de aynı olduğunda, hangi satırların farklı olduğunu görmek için Red Gate Data Compare gibi bir üçüncü taraf aracı kullanırım .

Acı gibi geliyor. İyi şanslar!


1
Bunun imkansız olduğunu söylüyorsunuz ve sonra olası bir çözüm sunuyorsunuz :) Aslında, üzerinde çalıştığım yöntem, harici bir araç kullanarak sonucu karşılaştırmıyorum, ancak hepsini SQL'de yapıyorum hariç, önerinize benzer. Teşekkürler.
Tony

2

Birkaç yıl önce bunu yapmak için bir araç yazdım - iki veritabanı arasındaki veri karşılaştırması. O zamandan beri ticari bir yazılıma dönüştürdüm ve

www.sql-server-tool.com

  • tek bir lisans 99 $ 'a mal olur, ancak 30 gün boyunca ücretsiz olarak deneyebilirsiniz.

"SQL Server Karşılaştırma Aracı" için SCT adlı program (bir şeyleri adlandırmada hiç iyi olmadım :) - seçilen sütunları yok saymak veya karşılaştırma yöntemini belirtmek (kayıt-kayıt veya birincil anahtar / indeks karşılaştırması). Karşılaştırma "oturumları" daha sonra parametrelerin tekrar girilmesine gerek kalmadan kaydedilebilir ve yeniden oynatılabilir. Komut satırı parametresi, karşılaştırmaları tamamen otomatikleştirmek için kullanılabilir.

On milyonlarca satır için biraz yavaş olabilir - bu durumda daha küçük bir veri alt kümesiyle başlamanızı öneririm - diyelim ki sadece ilk 1.000 satırı karşılaştırın - ve işlemin herhangi bir ince ayarının gerekli olup olmadığını görün.

Dariusz Dziewialtowski-Gintowt


Uygulamanızı önerdiğiniz için teşekkür ederim, denedim ama farklı şemaları karşılaştırmıyor , ne yapmam gerekiyor. İlk tablodan veri alınırken başarısız oldu. Ayrıca, karşılaştırılan satır sayısını sınırlamanın bir yolu olmadığı için uygulamanın sahip olduğum veri miktarını işleyip işlemeyeceğinden emin değilim; test ettiğim tabloda 99 milyon sıra var.
Tony
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.