La première chose dont vous aurez besoin est une table ou un autre mécanisme pour stocker les informations de version du schéma. Si rien d'autre, vous pouvez lier votre application et votre schéma ensemble. Il n'y a rien de plus pénible qu'une version de l'application contre le mauvais schéma — défaut, les données corrompant, etc.
L'application doit rejeter ou arrêt si ce ne est pas la bonne version — que vous pourriez obtenir un certain blowback lorsque son pas droit, mais vous protège contre le très mauvais jour où la base de données corrompt les données précieuses.
Vous aurez besoin d'un moyen de suivre les modifications telles que Subversion ou autre — à partir de SQL, vous pouvez exporter le schéma initial. De là, vous aurez besoin d'un mécanisme pour suivre les changements à l'aide d'un outil sympa tel que comparer SQL, puis suivre les changements de schéma et faire correspondre à une mise à jour du numéro de version dans la base de données cible. Nous conservons chaque delta dans un dossier distinct sous l'utilitaire de mise à niveau que nous avons construit. Cet utilitaire se connecte au serveur, lit les informations de version, puis applique les scripts de transformation de la version suivante dans la base de données jusqu'à ce qu'il ne trouve plus de scripts de mise à niveau dans son sous-dossier. Cela nous donne la possibilité de mettre à jour une base de données, quel que soit l'âge de la version actuelle. S'il y a des transformations de données uniques au locataire, celles-ci deviendront difficiles. Bien sûr, vous devriez toujours faire une sauvegarde de la base de données qui écrit dans un fichier externe de préférence avec un numéro de version identifiable humain afin que vous puissiez le trouver et le restaurer lorsque le (s) script (s) vont mal. Et finalement, il faudra juste prévoir comment récupérer et restaurer. J'ai vu qu'il y avait une sorte d'outil de mise à niveau de schéma dans le nouveau VS 2010 mais je ne l'ai pas utilisé. Cela pourrait aussi vous être utile.
Je pensais utiliser un framework comme Migrator.Net ou RikMigrations. Donc, je peux dans mon Build Server créer une build qui obtient la dernière version et exécute une commande qui vérifie et met à jour mes schémas. Un problème que je vois est lorsque l'application a de nombreux locataires, ce processus de mise à jour des schémas sera lent et dangereux. Que pensez-vous? Merci Mike –
Si vous pouvez fermer l'application pendant une fenêtre de maintenance, c'est le meilleur/le plus facile pas de soucis de mises à jour de données, etc., vous pouvez avoir plusieurs instances de sauvegarde et de migration contre vos serveurs sql. Ce que nous avons fait était de configurer une page de porte avant que les utilisateurs d'une version particulière ne soient redirigés vers un sereur/chemin particulier. Si une demande d'authentification vient dans ADN leur DB est marqué comme dans la mise à niveau, nous les redirige vers la page "down for maintenance" et ne pas les transmettre à l'application. une fois sa sauvegarde pour eux, ils peuvent être redirigés de l'authentification aux serveurs avec la nouvelle version – MikeJ
J'ai regardé rikMigrations. Le bummer que j'ai vu était qu'il n'a pas un moyen de travailler avec les SP ou les vues, probablement parce que ces mises à jour quand un code DDL s'exécute. Nous incluons dans notre code actuel des scripts pour supprimer tous ces artefacts, puis les reconstruire pour le nouveau schéma. – MikeJ