Domanda

Sto cercando un modo per convalidare lo schema SQL su un DB di produzione dopo aver aggiornato una versione dell'applicazione. Se l'applicazione non corrisponde alla versione dello schema DB, dovrebbe esserci un modo per avvisare l'utente ed elencare le modifiche necessarie.

Esiste uno strumento o un framework (da utilizzare a livello di codice) con funzionalità integrate per farlo? O c'è qualche semplice algoritmo per eseguire questo confronto?

  

Aggiornamento: elenchi Red Gate " da $ 395 " ;. Qualcosa di gratuito? O più a prova di errore che mantenere il numero di versione?

È stato utile?

Soluzione

Prova questo SQL.
- Eseguirlo su ciascun database.
- Salva l'output in file di testo.
- Diff i file di testo.

/* get list of objects in the database */
SELECT name, 
       type 
FROM  sysobjects
ORDER BY type, name

/* get list of columns in each table / parameters for each stored procedure */
SELECT so.name, 
       so.type, 
       sc.name, 
       sc.number, 
       sc.colid, 
       sc.status, 
       sc.type, 
       sc.length, 
       sc.usertype , 
       sc.scale 
FROM   sysobjects  so , 
       syscolumns  sc 
WHERE  so.id = sc.id 
ORDER BY so.type, so.name, sc.name

/* get definition of each stored procedure */
SELECT so.name, 
       so.type, 
       sc.number, 
       sc.text 
FROM   sysobjects  so , 
       syscomments sc 
WHERE  so.id = sc.id 
ORDER BY so.type, so.name, sc.number 

Altri suggerimenti

Spero di poterti aiutare - questo è l'articolo che suggerisco di leggere:

Confronta automaticamente gli schemi del database di SQL Server

Descrive come automatizzare il confronto degli schemi di SQL Server e il processo di sincronizzazione utilizzando T-SQL, SSMS o uno strumento di terze parti.

Puoi farlo programmaticamente guardando nel dizionario dei dati (sys.objects, sys.columns ecc.) di entrambi i database e confrontandoli. Tuttavia, vi sono anche strumenti come Redgate SQL Compare Pro che lo fanno per tu. Ho specificato questo come parte degli strumenti per il controllo qualità sui sistemi di data warehouse in alcune occasioni, incluso quello su cui sto attualmente lavorando. Nel mio concerto attuale questo non è stato affatto un problema, dato che i DBA qui lo stavano già utilizzando.

La metodologia di base per l'utilizzo di questi strumenti è quella di mantenere uno script di riferimento che costruisce il database e mantenerlo nel controllo della versione. Esegui lo script in un database scratch e confrontalo con il tuo target per vedere le differenze. Genererà anche script di patch se ti senti così incline.

Per quanto ne so non c'è niente di gratuito che lo fa a meno che tu non abbia voglia di scriverne uno tuo. Redgate è abbastanza economico da poter essere anche gratuito. Anche come strumento di controllo qualità per dimostrare che il DB di produzione non è nella configurazione, si pensava che lo avrebbe fatto risparmiare il prezzo di acquisto dopo un incidente.

Ora puoi utilizzare il mio SQL Admin Studio gratuitamente per eseguire un Confronto schema , Confronto dati e sincronizzare le modifiche. Da qui non è più necessario scaricare una chiave di licenza http://www.simego.com/Products/ SQL-Admin-Studio

Funziona anche con SQL Azure.

[AGGIORNAMENTO: Sì, sono l'autore del programma di cui sopra, poiché ora è gratuito, volevo solo condividerlo con la community]

Se stai cercando uno strumento in grado di confrontare due database e mostrarti la differenza che Red Gate fa Confronto SQL

Non hai menzionato quale RDMBS stai usando: se le viste SCHEMA INFORMAZIONI sono disponibili nel tuo RDBMS e se puoi fare riferimento a entrambi gli schemi dallo stesso host, puoi interrogare le viste SCHEMA INFORMAZIONI per identificare le differenze in: -Tavoli -colonne -colonna tipi vincoli (ad es. chiavi primarie, vincoli univoci, chiavi esterne, ecc.)

Ho scritto un set di query esattamente per questo scopo su SQL Server per un lavoro passato: ha funzionato bene per identificare le differenze. Molte delle query utilizzavano LEIN JOIN con IS NULL per verificare l'assenza di elementi previsti, altre stavano confrontando elementi come tipi di colonna o nomi di vincoli.

È un po 'noioso, ma è possibile.

Ho trovato questo strumento piccolo e gratuito che si adatta alla maggior parte delle mie esigenze. http://www.wintestgear.com/products/MSSQLSchemaDiff/MSSQLSchemaDiff.html

È molto semplice ma mostra le differenze dello schema di due database. Non ha elementi fantasiosi come gli script generati automaticamente per fare in modo che le differenze scompaiano e non confronta i dati.

È solo una piccola utility gratuita che mostra le differenze dello schema :)

Crea una tabella e archivia il tuo numero di versione. Assicurati di aggiornarlo se necessario.

CREATE TABLE version (
    version VARCHAR(255) NOT NULL
)
INSERT INTO version VALUES ('v1.0');

È quindi possibile verificare che il numero di versione memorizzato nel database corrisponda al codice dell'applicazione durante l'installazione dell'app o ovunque sia conveniente.

Quale RDBMS è questo e quanto sono complesse le potenziali modifiche?

Forse questo è solo una questione di confronto dei conteggi delle righe e dei conteggi degli indici per ogni tabella - se hai delle versioni di procedure trigger e memorizzate di cui preoccuparti, allora hai bisogno di qualcosa di più industriale

Prova dbForge Data Compare for SQL Server . Può confrontare e sincronizzare qualsiasi database, anche di dimensioni molto grandi. Veloce, facile, offre sempre un risultato corretto. Provalo sul tuo database e commenta il prodotto.

Possiamo consigliarti uno strumento di confronto SQL affidabile che offre un confronto e una sincronizzazione 3 volte più rapidi dei dati della tabella nei database di SQL Server. È dbForge Data Compare per SQL Server.

Vantaggi principali:

  • Confronto più rapido e sincronizzazione di database di grandi dimensioni
  • Supporto di backup nativi di SQL Server
  • Mappatura personalizzata di tabelle, colonne e schemi
  • Opzioni multiple per ottimizzare il confronto e la sincronizzazione
  • Generazione di rapporti di confronto e sincronizzazione

Plus prova gratuita di 30 giorni e acquisto privo di rischi con garanzia di rimborso di 30 giorni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top