Esistono strumenti per eseguire il confronto dei dati tra due diversi schemi?


11

Stiamo migrando il nostro database su un nuovo schema ma vogliamo validare che i dati siano stati spostati correttamente.

Gli strumenti di confronto dei dati tradizionali possono confrontare due database per differenze se gli schemi sono uguali. Nel nostro caso sono state apportate modifiche ai disegni della tabella ma tutti i dati del vecchio schema sono nel nuovo, sono stati spostati un po 'e devo assicurarmi che siano corretti. Abbiamo decine di milioni di file, quindi l'ispezione manuale non è un'opzione.

Ci sono strumenti che potrebbero aiutare in questo tipo di confronto?

In caso contrario, ci sono librerie / framework che potrebbero aiutare a dare il via allo sviluppo di una soluzione personalizzata?

Sono felice di utilizzare una soluzione specifica per il database, se necessario, in questo caso per SQL Server 2008.

Il mio soluton: sto confrontando i due set di dati creando uno VIEWdi ciascuna tabella sul vecchio database con gli stessi campi della nuova tabella del database.

Quindi confronto i dati usando la tecnica qui descritta: il modo più breve, veloce e semplice per confrontare due tabelle in SQL Server: UNION!

Sono fortunato in questa migrazione poiché la struttura generale della tabella è simile al vecchio database, con i campi spostati da una tabella all'altra, eliminati o aggiunti. Nel caso del rilascio e dell'aggiunta non c'è nulla da confrontare, per i campi che sono stati spostati o aggregati faccio calcoli nella vista per fornire le informazioni corrette per il confronto.

Il UNIONconfronto mi mostra solo le righe con differenze, quindi non appena i dati sono corretti ottengo un set di risultati vuoto.


1
Come saprai che i dati sono corretti se gli schemi sono cambiati? Cosa succede se una tabella è stata divisa, o combinata ecc.?
gbn,


@AaronBertrand - Grazie per il tuo commento, ma al momento (3 anni fa) ho studiato la disponibilità di strumenti per questo, ma non ho trovato nessuno che potesse eseguire un confronto tra schemi diversi . Speravo che il tuo link fosse a uno strumento che potevo comprare perché ne ho ancora bisogno.
Tony,

@Tony puoi sicuramente farlo con lo strumento di Red-Gate (non sono sicuro di nessuno degli altri), devi solo fare un po 'di mappatura manuale.
Aaron Bertrand

@Tony Schemi diversi, stesso database? O schemi diversi, database diversi?
Aaron Bertrand

Risposte:


7

Non è impossibile confrontare due diversi schemi, è un calcolo di quanto sei sicuro del risultato. Ho essenzialmente preso in prestito dalle tecniche di riconciliazione bancaria

Importante: questa riconciliazione non consiste nell'assicurarsi che la destinazione corrisponda esattamente alla fonte nel suo contesto di dati (c'è un motivo per cui si sta migrando verso un nuovo sistema), ma è necessario spiegare eventuali discrepanze!

Base:

  1. Identifica le metriche che utilizzerai per misurare (ad es.: Numero totale di utenti, somma di tutte le loro età, elenco degli ID utente e dei loro codici postali ...)
  2. Scarica questi dati in una posizione comune (tramite visualizzazioni / rapporti / qualunque cosa sia ragionevole)
  3. Confronta i tuoi dati e assicurati che qualsiasi discrepanza possa essere spiegata

In genere ho diviso il confronto in diversi metodi (in particolare per le metriche dettagliate):

  • Per tabella: in genere si utilizza la tabella di origine come definizione, creando una serie di viste sul DB di destinazione per provare a riprodurre i dati della tabella di origine
  • Per oggetto: a seconda del DB e di ciò che si sta archiviando, potrebbe essere più sensato creare una vista olistica degli oggetti (ad es. L'utente) su più tabelle, simile alla precedente creazione di una serie di viste per restituire l'oggetto come insieme di risultati
  • Per report: se il DB di origine dispone di una buona serie completa di report di gestione, un'altra tecnica consiste nel riprodurre quei report con la stessa formattazione esatta

tecniche:

Indipendentemente dal metodo che ho usato per produrre ciò che verrà confrontato, finisco con un set di file / viste / dbs che contengono i dati di origine e destinazione riconciliabili, quindi a seconda del supporto posso usare uno degli strumenti comunemente disponibili per confrontarli. Le mie preferenze sono:

  1. Confronto di file
    Crea due cartelle diverse per SourceDB e DestinationDB (data / ora stampate in modo da sapere quando ho fatto la riconciliazione) e scarica l'output delle mie metriche come file con nomi pertinenti, quindi utilizza uno strumento di confronto (come CSDiff ) per identificare le differenze

  2. Confronto di Excel
    In particolare quando si tratta di report di gestione, creerò una serie di Excel di cartelle di lavoro per confrontare i report (essenzialmente facendo uso di VLookups e confrontando i totali)

  3. Confronto dei dati
    Invece di inviare i dati di riconciliazione a file o report, inviarli a DB separati, quindi utilizzare qualcosa come Redgate SQL Data Compare per confrontare i DB

Altri strumenti:

Non ho provato nessuno di questi, ma una rapida ricerca su google su "Strumenti di riconciliazione dei dati" dà:

Ce ne sono altri, ma quelli erano quelli che sembravano ragionevoli


Grazie per i suggerimenti Come dici tu, non è impossibile (al momento sto lavorando a una soluzione) è solo difficile. Esaminerò i metodi che menzioni.
Tony,

Non preoccuparti, Tony, il trucco che ho trovato è cercare di suddividerlo in passaggi più piccoli e quindi trovare gli strumenti esistenti per ogni passaggio (dovrai scrivere alcune cose personalizzate, si tratta solo di ridurre al minimo lo sforzo, ove possibile)
Andrew Bickerton

6

Se si desidera confrontare i dati in due diversi progetti di database, è necessario scrivere SQL codificato a mano per confrontare i dati.

  • Cosa succede se una tabella è stata divisa, o combinata ecc.
  • E se avessi datetime, ora hai smalldatetime = i dati saranno diversi
  • ...

Non esiste una libreria di framework per verificare che i dati siano gli stessi in due database diversi.

Solo tu sai cosa avresti cambiato o modificato


Temevo tanto, ma pensavo che avrei chiesto nel caso qualcuno avesse fatto un simile confronto. Speravo che ci potesse essere uno strumento per accelerare la scrittura della query, ma come dici tu, probabilmente dovrò scrivere qualcosa da zero.
Tony,

1
@Tony: sì: è perché qualsiasi strumento non può separare "ciò che è sbagliato" da "ciò che abbiamo cambiato"
gbn

5

Sarà impossibile per te confrontare diversi schemi. Per risolvere il tuo problema, vorrei capire quali dati devi confrontare. Vorrei quindi creare una vista su ciascun server che tirasse indietro i dati che volevo confrontare (prendere in considerazione i tipi di dati e simili).

Una volta che entrambe le viste sono uguali, utilizzerei uno strumento di terze parti come Red Gate Data Compare per vedere quali righe sono diverse.

Sembra un dolore. In bocca al lupo!


1
Dici che è impossibile e quindi fornisci una possibile soluzione :) In effetti, il metodo su cui stavo lavorando è simile al tuo suggerimento, tranne per il fatto che non sto confrontando il risultato usando uno strumento esterno ma facendo tutto in SQL. Grazie.
Tony,

2

Un paio di anni fa ho scritto uno strumento per fare proprio questo: un confronto di dati tra due database. Da allora l'ho convertito in un software commerciale e pubblicato su

www.sql-server-tool.com

  • una singola licenza costa 99 $, ma puoi provarla gratuitamente per 30 giorni.

Il programma - chiamato SCT per "SQL Server Comparison Tool" (non sono mai stato bravo a nominare le cose :) - ha molte opzioni di regolazione fine, come: ignorare le colonne selezionate o specificare il metodo di confronto (record per record o chiave primaria / confronto indice). Le "sessioni" di confronto possono essere salvate e riprodotte in un secondo momento senza dover reinserire i parametri. Il parametro della riga di comando può essere utilizzato per automatizzare completamente i confronti.

Per decine di milioni di righe potrebbe essere un po 'lento - in tal caso, consiglierei di iniziare con un sottoinsieme di dati più piccolo - diciamo di confrontare solo le prime 1.000 righe - e vedere se è necessaria una messa a punto del processo.

Dariusz Dziewialtowski-Gintowt


Grazie per aver consigliato la tua app, l'ho provato ma non confronta diversi schemi, che è quello che devo fare. Non è riuscito durante il recupero dei dati dalla prima tabella. Non sono inoltre sicuro se l'app gestirà la quantità di dati che ho in quanto non sembra esserci un modo per limitare il numero di righe rispetto; la tabella su cui l'ho provato ha 99 milioni di righe.
Tony,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.