Apakah ada alat untuk melakukan perbandingan data antara dua skema yang berbeda?

11

Kami sedang memigrasi basis data kami ke skema baru tetapi ingin memvalidasi data telah dipindahkan dengan benar.

Alat perbandingan data tradisional dapat membandingkan dua database untuk perbedaan jika skema adalah sama. Dalam kasus kami telah ada perubahan pada desain tabel tetapi semua data dari skema lama ada di yang baru, itu hanya dipindahkan sedikit, dan saya harus memastikan itu benar. Kami memiliki puluhan juta baris sehingga inspeksi manual bukan pilihan.

Apakah ada alat yang dapat membantu dalam jenis perbandingan ini?

Jika tidak, apakah ada perpustakaan / kerangka kerja yang dapat membantu memulai pengembangan solusi khusus?

Saya senang menggunakan solusi khusus basis data jika perlu, dalam hal ini untuk SQL Server 2008.

Soluton saya: Saya membandingkan dua set data dengan membuat VIEWsetiap tabel pada database lama dengan bidang yang sama dengan tabel database baru.

Saya kemudian membandingkan data menggunakan teknik yang dijelaskan di sini: Cara terpendek, tercepat, dan termudah untuk membandingkan dua tabel di SQL Server: UNION!

Saya beruntung dalam migrasi ini karena struktur tabel secara keseluruhan mirip dengan database lama, dengan bidang-bidang dipindahkan dari satu tabel ke yang lain, dijatuhkan atau ditambahkan. Dalam hal dijatuhkan dan ditambahkan tidak ada yang bisa dibandingkan, untuk bidang yang telah dipindahkan atau digabungkan saya melakukan perhitungan dalam pandangan untuk memberikan informasi yang benar untuk perbandingan.

The UNIONperbandingan menunjukkan saya hanya baris dengan perbedaan, sehingga segera setelah data yang benar saya mendapatkan hasil kosong.

Tony
sumber
1
Bagaimana Anda tahu data itu benar jika skema telah berubah? Bagaimana jika sebuah tabel telah dipecah, atau digabungkan dll?
gbn
@AaronBertrand - Terima kasih atas komentar Anda, tetapi pada saat itu (3 tahun yang lalu) saya menyelidiki ketersediaan alat untuk ini tetapi tidak menemukan satu pun yang akan melakukan perbandingan antara berbagai skema. Saya berharap tautan Anda ke alat yang dapat saya beli karena saya masih membutuhkannya.
Tony
@Tony Anda tentu bisa melakukannya dengan alat Red-Gate (tidak yakin tentang yang lain), Anda hanya perlu melakukan beberapa pemetaan manual.
Aaron Bertrand
@ Tony Skema yang berbeda, database yang sama? Atau skema yang berbeda, database yang berbeda?
Aaron Bertrand

Jawaban:

7

Bukan tidak mungkin membandingkan dua skema yang berbeda, ini adalah perhitungan seberapa yakin Anda terhadap hasilnya. Saya pada dasarnya meminjam dari teknik Rekonsiliasi Bank

Penting: Rekonsiliasi ini bukan tentang memastikan tujuan tepat sama dengan sumber dalam konteks data itu (ada alasan Anda bermigrasi ke sistem baru), tetapi Anda perlu menjelaskan perbedaan apa pun!

Dasar:

  1. Identifikasi metrik yang akan Anda gunakan untuk mengukur (yaitu: jumlah total pengguna, jumlah semua usia mereka, daftar id pengguna dan kode pos mereka ...) Saya mencoba menggunakan beberapa metrik dari: Total, Rata-rata & sampel / catatan terperinci
  2. Buang data ini ke lokasi umum (melalui tampilan / laporan / apa pun yang masuk akal)
  3. Bandingkan data Anda dan pastikan perbedaan apa pun dapat dijelaskan

Saya biasanya membagi perbandingan menjadi beberapa metode (khususnya untuk metrik terperinci):

  • Menurut Tabel: Biasanya menggunakan Tabel Sumber sebagai definisi, membuat satu set pandangan tentang DB tujuan untuk mencoba dan mereproduksi Data Tabel Sumber
  • Berdasarkan Objek: Bergantung pada DB dan apa yang Anda simpan, mungkin lebih masuk akal untuk membuat tampilan holistik objek (yaitu: pengguna) di beberapa tabel, mirip dengan di atas membuat seperangkat tampilan untuk mengembalikan objek itu sebagai mengatur hasil
  • Dengan Laporan: Jika Sumber DB memiliki kumpulan Laporan Manajemen yang komprehensif dan baik, teknik lain adalah mereproduksi laporan tersebut dengan format yang sama persis

Teknik:

Tidak peduli metode apa yang saya gunakan untuk menghasilkan apa yang akan dibandingkan, saya berakhir dengan satu set file / tampilan / dbs yang menyimpan data Sumber dan Tujuan yang dapat direkonsiliasi, kemudian tergantung pada medianya saya dapat menggunakan salah satu alat yang tersedia secara umum untuk membandingkannya. Preferensi saya sendiri adalah:

  1. Perbandingan File
    Buat dua folder berbeda untuk SourceDB dan DestinationDB (waktu / versi dicap jadi saya tahu ketika saya melakukan rekonsiliasi) dan membuang output metrik saya sebagai file yang relevan, kemudian gunakan alat perbandingan (seperti CSDiff ) untuk mengidentifikasi perbedaan

  2. Perbandingan Excel
    Secara khusus ketika berurusan dengan laporan Manajemen, saya akan membuat satu set Excel buku kerja untuk membandingkan laporan (pada dasarnya memanfaatkan VLookups dan membandingkan total)

  3. Perbandingan Data
    Daripada mengeluarkan data rekonsiliasi ke file atau laporan, mengeluarkannya untuk memisahkan DB, kemudian menggunakan sesuatu seperti Redgate SQL Data Compare untuk membandingkan DB

Alat lainnya:

Tidak mencoba semua ini, tetapi pencarian google cepat pada 'Alat rekonsiliasi data' memberikan:

Ada yang lain, tapi itu yang terlihat masuk akal

Andrew Bickerton
sumber
Terima kasih atas sarannya. Seperti yang Anda katakan, itu bukan tidak mungkin (saya sedang mengerjakan solusi saat ini) itu hanya sulit. Saya akan melihat metode yang Anda sebutkan.
Tony
Jangan khawatir @Tony, trik yang saya temukan adalah mencoba dan memecahnya menjadi langkah-langkah yang lebih kecil dan kemudian menemukan alat yang ada untuk setiap langkah (Anda perlu menulis beberapa hal khusus, ini hanya tentang meminimalkan upaya itu jika memungkinkan)
Andrew Bickerton
6

Jika Anda ingin membandingkan data dalam dua desain basis data yang berbeda maka Anda harus menulis kode tangan SQL untuk membandingkan data.

  • Bagaimana jika sebuah tabel telah dipecah, atau dikombinasikan dll
  • Bagaimana jika Anda memiliki datetime, sekarang Anda memiliki smalldatetime = data akan berbeda
  • ...

Tidak ada pustaka kerangka kerja untuk memeriksa data yang sama di dua basis data yang berbeda.

Hanya Anda yang tahu apa yang Anda ubah atau modifikasi

gbn
sumber
Saya sangat takut tetapi berpikir saya akan bertanya jika seseorang melakukan perbandingan seperti itu. Saya berharap mungkin ada alat untuk mempercepat penulisan kueri, tetapi seperti yang Anda katakan, saya mungkin harus menulis sesuatu dari awal.
Tony
1
@ Tony: ya: itu karena alat apa pun tidak dapat memisahkan "apa yang salah" dari "apa yang kami ubah"
gbn
5

Tidak mungkin bagi Anda untuk membandingkan berbagai skema. Untuk mengatasi masalah Anda, saya akan mencari tahu data apa yang perlu Anda bandingkan. Saya kemudian akan membuat tampilan pada setiap server yang akan menarik kembali data yang ingin saya bandingkan (memperhitungkan jenis data dan semacamnya).

Setelah kedua tampilan sama, saya akan menggunakan alat pihak ketiga seperti Red Gate Data Compare untuk melihat baris apa yang berbeda.

Kedengarannya seperti sakit. Semoga berhasil!

SqlSandwich
sumber
1
Anda mengatakan itu tidak mungkin dan kemudian memberikan solusi yang mungkin :) Sebenarnya, metode yang saya kerjakan mirip dengan saran Anda kecuali saya tidak membandingkan hasilnya menggunakan alat eksternal tetapi melakukan semuanya dalam SQL. Terima kasih.
Tony
2

Beberapa tahun yang lalu saya menulis alat untuk melakukan hal itu - perbandingan data antara dua database. Sejak itu saya mengonversinya menjadi perangkat lunak komersial dan diterbitkan di

www.sql-server-tool.com

  • satu lisensi berharga 99 $, tetapi Anda dapat mencobanya secara gratis selama 30 hari.

Program - bernama SCT untuk "SQL Server Comparison Tool" (Saya tidak pernah mahir dalam hal penamaan :) - memiliki banyak opsi fine-tuning, seperti: mengabaikan kolom yang dipilih atau menentukan metode perbandingan (record-by-record atau primary key / perbandingan indeks). "Sesi" perbandingan dapat disimpan dan diputar ulang nanti tanpa perlu memasukkan kembali parameter. Parameter baris perintah dapat digunakan untuk mengotomatiskan perbandingan sepenuhnya.

Untuk puluhan juta baris mungkin agak lambat - dalam hal ini saya akan merekomendasikan untuk memulai dengan subkumpulan data yang lebih kecil - katakanlah bandingkan hanya 1.000 baris pertama - dan lihat apakah ada penyempurnaan proses yang diperlukan.

Dariusz Dziewialtowski-Gintowt

Dariusz Dziewialtowski-Gintowt
sumber
Terima kasih telah merekomendasikan aplikasi Anda, saya mencobanya tetapi tidak membandingkan skema yang berbeda , yang perlu saya lakukan. Gagal saat mendapatkan data dari tabel pertama. Saya juga tidak yakin apakah aplikasi akan menangani jumlah data yang saya miliki karena sepertinya tidak ada cara untuk membatasi jumlah baris yang dibandingkan; tabel tempat saya mengujinya memiliki 99 juta baris.
Tony