Comment un groupe peut-il suivre les modifications de schéma de base de données?


67

Quelles méthodologies de contrôle de version aident les équipes de personnes à suivre les modifications de schéma de base de données?


Qu'essayez-vous d'accomplir ici? Essayez-vous d'alerter les gens sur les changements ou de créer une piste d'audit indiquant qui a modifié quoi et quand? Quelque chose d'autre entièrement?
ScottCher

@Scott - Pour pouvoir créer presque comme une piste d'audit pour les autres développeurs, nous savons que nous avons le schéma de développement le plus récent et que les sites de test et de production peuvent être facilement vérifiés pour voir quel schéma ils exécutent.
Toby

1
C’est similaire à la question que je viens de poser mais je pense qu’ils sont suffisamment différents pour y répondre à la fois dba.stackexchange.com/questions/64/…
Beth Whitezel

1
@BitOff - Je suis d'accord et je pense que ma réponse à la question que vous avez mentionnée est également ici. L'utilisation d'un outil tel que PowerAMC ​​ou ERWin peut aider à contrôler les versions d'une conception de base de données. Si la base de données est modélisée en externe et que toutes les modifications sont planifiées dans le modèle, vous pouvez mieux contrôler et diffuser ces modifications à des fins de révision.
ScottCher

1
Découvrez Liquibase ou Flyway
a_horse_with_no_name

Réponses:


44

Il y a quelques minutes à peine, je vérifiais ceci: Un tableau qui devrait exister dans tous les projets avec une base de données , semble assez simple à mettre en pratique, vérifiez-le:

C'est ce qu'on appelle schema_version (ou migrations, ou ce qui vous convient) et son but est de garder trace des modifications structurelles ou de données apportées à la base de données. Une structure possible (exemple dans MySQL) est:

create table schema_version (
     `when` timestamp not null default CURRENT_TIMESTAMP,
     `key` varchar(256) not null,
     `extra` varchar(256),
     primary key (`key`)
) ENGINE=InnoDB;

insérer dans schema_version ( key, extra) valeurs ('001', 'version du schéma');

Que vous ajoutiez cette table depuis le début du projet ou juste après que vous ayez déployé la première version sur un serveur de transfert ou de production dépend de votre choix.

Chaque fois que vous devez exécuter un script SQL pour modifier la structure de la base de données ou effectuer une migration de données, vous devez également ajouter une ligne dans cette table. Et faites cela via une instruction insert au début ou à la fin de ce script (qui est validé dans le référentiel de code du projet).


1
@ David - C'est presque une question en soi, mais pourriez-vous expliquer très rapidement comment le tableau pourrait envoyer des commentaires à votre VCS? Juste avec un vidage manuel?
Toby

@Toby - avec un déploiement, les scripts ont été placés dans SVN et le développeur a fourni le SVN rev ou le bogue JIRA # - nous (dbas) avons inséré leurs notes rapides et rev # dans ce tableau. Pour faire le lien, cependant, nous avons créé une page Web pour pointer vers cette table avec un lien hypertexte vers JIRA.
David Hall

Oui. Fondamentalement, l'OP l'a inversé - vous utilisez des scripts de déploiement que vous modifiez, vous ne travaillez pas à partir de deltas de base de données. Celles-ci ne fonctionnent de toute façon que dans des cas dégénérés (simplifiés) - vous devrez peut-être effectuer des transformations en plusieurs étapes pour mettre à jour un schéma, qu'un outil ne peut pas générer en arrière. Mais les scripts de déploiement peuvent gérer cela.
TomTom

23

Je pense que la meilleure méthode consiste à générer la base de données dans le cadre de votre processus de construction . Conservez tous les scripts dans le contrôle de code source avec le reste du code, chacun étant responsable de son propre environnement.

En cas d'échec, RedGate dispose d' un outil pour intégrer le contrôle de source dans SSMS et SQL Compare est utile pour comparer / synchroniser les schémas MS SQL Server. Visual Studio Database Edition possède également un outil de comparaison de schéma intégré .

Une autre question SO me conduit au Migrator Dot Net sur lequel je vais commencer à enquêter pendant mon temps libre copieux. Cela semble être une bonne méthode, mais il s’agit peut-être davantage d’un investissement en temps / frais généraux que vous ne le souhaitez.


L '"édition de base de données" de Visual Studio était un produit distinct, mais elle est maintenant incluse dans les éditions, y compris Team Server. Personnellement, je préfère l'outil RedGate (SQL Compare) pour les synchroniser.
Tangurena

12

eiefai déjà mentionné Une table qui devrait exister dans tous les projets avec une base de données . Ceci est un excellent article de blog, mais l’OMI n’est qu’une partie du chemin menant à une solution opérationnelle pour le contrôle des révisions de bases de données. Je pense que toute tentative de "répondre" à cette question dans le monde réel doit prendre en compte d'autres informations sur VCS et les bases de données:


8

Je pense qu’il existe différents angles pour aborder cette question. Je crois que l'angle "outil d'abord" va varier en fonction de la plate-forme et des préférences personnelles. Exemple: j'utilise un projet de base de données dans MS Visual Studio, mais je ne suis pas sûr qu'il s'agisse d'une excellente solution pour MySQL. Je connais aussi des gens qui sont très vendus avec leurs outils préférés de Redgate, Erwin, Embarcadero, etc.

Il existe également un angle "processus d'abord" pour cette question, qui sera (espérons-le) revisité sur ce site dans les questions suivantes. Les clés de voûte de ce processus obtiennent votre schéma sous contrôle de source et gèrent les modifications de sorte que vous puissiez appliquer les modifications de schéma de la version "x" à la version "y" pratiquement à la demande.

Une réponse définitive à ce sujet finira par ressembler à un livre. Il est donc conseillé de commencer par en citer un: Redgate a récemment publié un ebook gratuit intitulé " Le Guide Red Gate du développement en équipe de SQL Server ". Il ya beaucoup de choses à débattre, c’est un très bon endroit pour commencer à débattre, OMI. Contrairement au nom, une grande partie du contenu de ce livre est suffisamment générale pour pouvoir être appliquée à n’importe quelle base de données (pas uniquement SQL Server) et à n’importe quel jeu d’outils (pas seulement Redgate). Si vous ne l'avez pas déjà vu, ça vaut vraiment le coup, au moins.

Enfin, il est probablement utile de lier la "réponse héritée" de stackoverflow .


5

SchemaCrawler est mon outil pour produire un fichier texte avec tous les objets de schéma de base de données. J'ai conçu cette sortie texte à la fois lisible par l'homme et différable par rapport à une sortie similaire d'un autre serveur.

En pratique, j'ai constaté que la sortie d'un fichier texte du schéma de base de données est utile, lorsqu'elle est effectuée dans le cadre de la construction. De cette façon, vous pouvez archiver le fichier texte dans votre système de contrôle de code source et disposer d'un historique des versions de l'évolution de votre schéma. SchemaCrawler est conçu pour automatiser cela aussi, à partir de la ligne de commande.


Pour oracle, consultez code.google.com/p/oracle-ddl2svn
popalka
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.