Per prima cosa è necessaria una tabella o un altro meccanismo per memorizzare le informazioni sulla versione dello schema. Se non altro, puoi legare insieme la tua applicazione e lo schema. Non c'è niente di più doloroso di una versione dell'applicazione contro il male schema — difetto, i dati corrompere, ecc
L'applicazione dovrebbe rifiutare o l'arresto se non la versione giusta — si potrebbe ottenere qualche contraccolpo quando il suo non è giusto, ma ti protegge dal giorno davvero brutto in cui il database danneggia i dati preziosi.
Avrete bisogno di un modo per tenere traccia delle modifiche come Subversion o qualcos'altro — da SQL è possibile esportare lo schema iniziale. Da qui avrete bisogno di un meccanismo per tenere traccia delle modifiche utilizzando uno strumento piacevole come il confronto SQL e quindi tracciare le modifiche dello schema e associarlo a un aggiornamento nel numero di versione nel database di destinazione.
Manteniamo ogni delta in una cartella separata sotto l'utilità di aggiornamento che abbiamo creato. Questa utility si collega al server, legge le informazioni sulla versione e quindi applica gli script di trasformazione dalla versione successiva nel database fino a quando non trova più script di aggiornamento nella sottocartella. Questo ci dà la possibilità di aggiornare un database, non importa quanti anni ha con la versione corrente. Se ci sono trasformazioni di dati univoche l'inquilino, queste diventeranno difficili.
Ovviamente si dovrebbe sempre fare un backup del database che scrive su un file esterno preferibile con un numero di versione umano identificabile in modo da poterlo trovare e ripristinarlo quando lo script (i) va a male. E alla fine sarà così solo in programma di capire come recuperare e ripristinare.
Ho visto che c'è una sorta di strumento di aggiornamento dello schema nel nuovo VS 2010 ma non l'ho usato. Potrebbe anche esserti utile.
Stavo pensando di utilizzare un framework come Migrator.Net o RikMigrations. Quindi, nel mio Build Server posso creare una build che ottiene la versione più recente ed esegue un comando che controlla e aggiorna i miei schemi. Un problema che vedo è quando l'applicazione ha molti tenant, questo processo di schemi di aggiornamento sarà lento e pericoloso. Cosa ne pensi? Grazie Mike –
Se è possibile chiudere l'app durante una finestra di manutenzione, questo è il migliore/più semplice. non preoccuparti degli aggiornamenti dei dati, ecc. puoi avere più istanze di backup e migrazione verso i tuoi server sql. quello che abbiamo fatto è stato l'installazione di una porta principale piuttosto che quella di reindirizzare gli utenti di una particolare versione a un particolare serer/percorso. Se viene inoltrata una richiesta di autenticazione, il loro db è contrassegnato come nell'upgrade, li reindirizziamo alla pagina "down for maintenance" e non li passiamo all'app. una volta eseguito il backup, possono essere reindirizzati dall'autenticazione ai server con la nuova versione – MikeJ
Ho esaminato rikMigrations. Il guaio che ho visto è che non ha modo di lavorare con SP o Views, probabilmente perché questi aggiornamenti quando viene eseguito un codice DDL. includiamo nel nostro attuale codice script per eliminare tutte queste risorse e quindi ricostruirle per il nuovo schema. – MikeJ