Depuis environ deux mois, je recherche des solutions ou des pratiques pour gérer la gestion des versions dans les bases de données. Je cherche ce que les gens considèrent comme le meilleur processus pour gérer cela.
Nous avons 3 environnements pour nos bases de données:
- Développement
- Test d'acceptation utilisateur (UAT)
- Production
Le problème est parfois que nous apportons des modifications à plusieurs choses dans notre base de données de développement et que le moment est venu de déployer, certaines fonctionnalités peuvent ne pas être prêtes à être publiées sur UAT.
Récemment, nous avons commencé à utiliser le contrôle Red Gate SQL Source pour stocker toutes nos entités (avec des validations régulières).
Je pensais à partir des ensembles de modifications (c'est-à-dire que tout depuis l'ensemble de modifications X et le retour est maintenant poussé vers UAT), cela signifie que les gens vérifient uniquement leur code dans le contrôle de code source juste avant de faire un déploiement qui peut devenir déroutant ( d'autant plus que les gens sont oublieux). Un autre problème lié à l'approche de l'ensemble de modifications est s'il y a un bogue dans une procédure stockée qui doit être corrigé, le numéro de l'ensemble de modifications finirait par être hors de portée de notre ensemble de modifications maximal pour la révision, ce qui le rend donc si nous devons recréer la base de données à partir d'un ensemble de modifications maximal, nous repousserions le bogue.
Des suggestions sur un processus?
Merci
la source
Réponses:
Migrations
Un haut et un bas, qui sont dans votre référentiel et étiquetés avec votre application.
Vous pouvez même bricoler avec des fichiers plats SQL qui modifient votre schéma et mettent à jour la version du schéma. Tout ce que vous avez à faire est de:
Eh bien, vous pouvez effectuer des changements de développement dans le développement, mais vous devez toujours faire sauter votre base de données et le reconstruire avec des migrations une fois que vous avez capturé le changement.
la source
Contrôle de source!
Vous ne déployez pas vos binaires de développement directement en production sans passer par svn / git / p4, alors pourquoi vos bases de données feraient-elles cela à elles seules? Obtenez des instances privées pour que les développeurs testent leurs modifications locales, mais quand il doit aller dans la base de données de développement, il doit passer par les fichiers ddl archivés. Vous pouvez même rédiger des outils pour appliquer ces modifications ddl automatiquement (je ne connais aucun moyen existant de le faire correctement).
Une fois que vous avez mis en place les restrictions concernant les modifications du schéma db (plus de sqlplus -> problème avec ddl!) Et que vous avez un contrôle de compte strict (pas d'accès ddl à tout le monde), cela devrait devenir plus gérable.
la source
Suite à la suggestion d'utiliser les migrations ... peut-être utiliser un O / RM qui prend en charge les migrations comme Ruby on Rails et Entity Framework 4.3 Le problème avec les deux approches est cependant qu'une migration est tout ou rien. Vous ne pouvez pas (généralement) sélectionner les migrations à appliquer comme vous le pouvez en termes d'ensembles de modifications.
Une autre option viable (si vous êtes sur la pile Microsoft, vous n'avez jamais mentionné la plate-forme) est de gérer votre SQL avec les outils de base de données Visual Studio. Il a intégré le refactoring (renommer / supprimer des colonnes, etc.) et fait la vérification du modèle. Si par exemple, un proc stocké fait référence à une colonne qui n'est plus là, il vous en informera.
la source