Domanda

La mia esigenza è abbastanza elementare e non voglio ricostruire la ruota.Mi piace creare script per il mio database e ho scritto script per aggiornarlo da una versione a quella successiva, ad esempio 001-create-tables.sql, 002-alter-column.sql ecc.

Quello che voglio è una semplice riga di comando dello strumento o MsBuild che esaminerà un database per vedere a quale versione si trova il database (usando alcune convenzioni di tabella) ed eseguire tutti gli script in una cartella con un numero superiore rispetto alla versione corrente del database.Vorrei anche che lo strumento eseguisse il rollback di uno script se fallisce/genera un errore e si ferma a quel punto.

Questo è quello che vorrei, ma non mi dispiace cambiare le mie convenzioni anche se voglio scrivere i miei script SQL.Voglio anche che lo strumento sia gratuito o open source poiché non mi serve troppo.Dato che i miei progetti sono C#, preferirei che lo strumento fosse creato in .Net

È stato utile?

Soluzione 7

OK così non mi piaceva nessuna delle opzioni che ho trovato là fuori. Ho trovato alcuni buoni strumenti per creare gli script ma niente che traccia la versione del database ed eseguire gli script. Comunque sono andato avanti e arrotolato il mio strumento open source per ottenere il lavoro fatto. Se si desidera utilizzarlo è possibile scaricare se da CodePlex la sua chiamata KissDB . Ho anche vomitato un post su di esso al mio blog blog.RunXc

Altri suggerimenti

Hai guardato? Apri DBDiff Ancora?Potrebbe essere un buon punto di partenza.

se cambi idea sull'open source, Confronto SQL di Red Gate è la strada da percorrere IMO.

C'è un progetto piuttosto interessante chiamato SQLRunner su SourceForge - è C #, è NET, è passato "pre-alpha" :-)

Non ho usato io stesso, ma ancora -. Sembra abbastanza buono, IMHO

Marc

Questo è un problema difficile, puro e semplice. Gli strumenti di cui in altre risposte possono sicuramente aiutare, ma si sta ancora a sinistra per fare molto da soli.

Mi hanno fatto una tabella nel mio schema che memorizza un ID per ogni script cambiamento (che corrisponde al numero del caso nel mio trouble ticket / bug). Alla fine di ogni script cambiamento inserisco l'ID in quel tavolo. Ho uno script separato che controlla per vedere ciò che è stato fatto su qualsiasi istanza specifica del database. Sarebbe fattibile per automatizzare l'esecuzione ciascuno degli script che non sono stati ancora eseguiti, ma mi piace di eseguire gli script di modifica manualmente nel caso in cui qualcosa va storto.

rollback può essere quasi impossibile, soprattutto perché molti modifiche dello schema richiedono una sorta di migrazione dei dati. Ho trovato che le migliori pratiche con le eventuali modifiche allo schema devono fare retrocompatibile loro. Mai rinominare una colonna o una tabella (almeno in un primo momento). Solo aggiungere le cose, e che tutti i nuovi aggiunge annullabile. Uno script di rollback semplicemente rimuove il nuovo materiale, se ci si rende conto che qualcosa non è giusto. Naturalmente si finisce con i vecchi, colonne e tabelle non utilizzati, in modo da scrivere un secondo script che viene eseguito dopo la vostra versione corrente è considerato stabile, che si sbarazza della roba vecchia.

Io vi voglio scrivere tutti gli script da soli è possibile usufruire del SQL Server 2005 tablediff Utility che vi darà un sacco di flessibilità. Alcuni esempi di utilizzo possono essere trovano qui

Se si dispone di tutti i vostri script per una data versione in una cartella, è possibile eseguire questo come un file batch se lo si inserisce in quella cartella:

for %%X in (*.SQL) do SQLCMD -S <SERVER_NAME> -d <DATABASE_NAME> -E -I -i "%%X"  >> ResultBatch.txt

Siamo spiacenti, non mi ricordo dove ho ricevuto questo da o darei credito.

Noi abbiamo i nostri sviluppatori di controllare gli script di modifica database in Subversion. Tutti gli script sono ripetibili in modo da poter eseguire loro più volte senza errori. Noi colleghiamo anche gli script di modifica a rilasciare gli elementi o gli ID di bug in modo che possiamo trattenere un cambiamento set, se necessario. Abbiamo poi abbiamo un processo di compilazione automatica che calcia fuori un singolo file di script SQL con tutte le modifiche ordinate in modo appropriato. Questo singolo file viene quindi utilizzato per promuovere le modifiche ai ambienti di test, QA e di produzione. Pensiamo che questo sia l'approccio migliore con gli sviluppatori enterprise. Maggiori dettagli su come lo facciamo QUI tuo feedback sarebbe apprezzato.

Usa liquibase. E 'Java però.

Sì, è possibile scrivere i vostri script di migrazione nella variante SQL di vostra scelta.

E 'ben collaudato e utilizzato da un sacco di gente.

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