Domanda

Il sistema software Io lavoro su un sistema di fatturazione medica, grandi quantità di dati e tabelle di dati, e stored procedure.

Stavo leggendo l'articolo " 12 passi per codice migliore " e nella Joel test # 2 afferma:? si può fare una build in un solo passaggio

Ora mi chiedevo, significa accumulo di distribuzione (in modo che un cliente può aggiornare il loro distribuzione).

Ora il problema principale sono in esecuzione in tutto, è come si fa a fare un aggiornamento del database ad un passo?

Al momento attuale, quando facciamo modifiche a un database, tutte le modifiche vengono registrate e ha aggiunto a uno script di aggiornamento del database, che ottiene un numero di versione collegato ad esso quando viene creata un'implementare per costruire cliente.

C'è un modo più semplice per fare questo? Alcuni script o l'applicazione là fuori che vuole un "prima e dopo" guardano uno schema di database e crea uno script di aggiornamento, come ho già detto?

O è solo il modo in cui tutti lo fanno, che avrei trovato difficile da credere, ma plausibile.

Un sistema automatizzato potrebbe diminuire gli errori e accelerare l'implementazione costruire volte notevolmente, e sarei interessato a sapere come farlo.

È stato utile?

Soluzione

Ci sono diversi livelli di complessità che si può passare attraverso:

  • se si dispone di script di aggiornamento che si crea manualmente, e sono solo in cerca di un modo per applicare facilmente coloro che a vari server, controlla la SSW SQL Deploy da SSW Consulting. E 'in grado di gestire questo scenario molto bene

  • se si tende a fare più di un approccio database di diff, quindi Red Gate SQL Confronto (già citato) e SQL Packager fare una grande combinazione. È possibile diff database tra vecchio e nuovo e quindi applicare le modifiche in un bel pacchetto - come un file EXE o un progetto C #

  • se si vuole un vero e proprio approccio end-to-end, ben pensato (con un po 'di una curva di apprendimento), controlla Innovartis' DBGhost approccio. Si tratta di una intera metodologia / tecnica come gestire lo sviluppo di database e gli aggiornamenti incrementali. E 'molto potente e sembra molto promettente - ma è un po' di un approccio tutto-o-niente: o si compra in esso e usarlo end-to-end, o non fare

Spero che questo aiuti un po '!

Altri suggerimenti

Redgate ha uno strumento SQL Compare per confrontare i database e generare uno script per sincronizzare. Eravamo abituati a usarlo, ma più recentemente passati a script manuali utilizzando lo stesso processo che si descrive. manuale utilizzando, a grana fine, gli script con un numero di versione unica ha funzionato bene.

Noi abbiamo i nostri script di aggiornamento integrate in unit test in modo da fare il test insieme al codice come parte di integrazione continua. Penso che questa è una parte importante per "fare una build in un solo passo."

Date un'occhiata a questo post del blog. Ho usato questo tipo di script di aggiornamento da qualsiasi versione singola DB su un paio di progetti e funziona abbastanza bene.

http: / /blogs.msdn.com/danhardan/archive/2007/03/30/database-change-scripts-mambo-style.aspx

Potrebbe essere necessario modificare il flusso di lavoro un po 'per adattare il vostro flusso di lavoro e / o aggiornare il file sql modello, ma nel complesso ho trovato l'idea di essere un approccio piuttosto solido per implementazioni DB.

EDIT: Giusto per elaborare su come ho usato questa tecnica. In sostanza, tutti i miei script di revisione DB vengono messe in controllo del codice sorgente. Poi, come una fase di post accumulo sulla scatola di build, questo strumento Mambo viene eseguito sulla directory script per rotolare gli script in un singolo script abbracciato da una transazione per consentire per il rollback se qualcosa va storto. Poi, il programma di installazione è abbastanza intelligente per cercare per lo script sql per correre contro il database esistente.

Il motivo per cui funziona è perché lo script arrotolato controlla per vedere ogni pezzo che è stato un singolo script ha già eseguito sul database desiderato. Di conseguenza, solo gli ultimi script vengono eseguiti. Un avvertimento a questo è che una volta che uno script viene controllato in controllo del codice sorgente ed è stato distribuito, non è possibile modificarlo dal momento che il tavolo di monitoraggio già pensa lo script è stato eseguito. Questo va bene per i progetti a cui ho lavorato, perché basta aggiungere un altro script nella cartella degli script.

Speriamo che sto spiegando il processo abbastanza bene da capire. In realtà non è quel complesso e può essere molto utile se l'approccio è applicabile al vostro progetto.

Risposta alla prima domanda di "Ora mi chiedevo, significa accumulo di distribuzione (in modo che un cliente può aggiornare il loro distribuzione)?"

Credo che il Joel Test # 2 non è per la distribuzione si sposta prod, ma per continuios intergration durante lo sviluppo.

Per quanto riguarda le modifiche del database in prod, dovrebbero tutti essere fatto attraverso uno script come parte di un rollout transazione o dopo che il database è stato eseguito il backup. Hai sempre voglia di essere in grado di tornare indietro se qualcosa dovesse fallire nel rollout.

Sviluppare il database come un insieme di patch che dipendono vicenda. Quindi utilizzare uno strumento come https://github.com/LuvDaSun/sqlpatch (da me) per costruire un file SQL per la distribuzione.

sqlpatch ordinerà le patch nel giusto ordine e assicurarsi che ogni patch viene eseguita esattamente una volta, anche se lo stesso script viene eseguito due volte.

Questa strategia può essere utilizzata per la distribuzione del database in un ambiente CI / CD. Questa distribuzione rendono facile come premere un ramo.

Ci sono applicazioni da sincronizzare database, ma penso che il vostro meglio fare quello che stai facendo. Scrivere uno script per aggiornare un database che si dà la possibilità di gestire gli errori e le transazioni eseguite. Questo è considerato migliori pratiche.

Microsoft si sono presentati applicazioni livello dati in SQL 2012 come un'opzione gratuita per la distribuzione e l'aggiornamento dei database.

io uso e come questo strumento, anche per distribuzioni di produzione.

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