Est-il un système de contrôle de version de la base de données des modifications de la structure?
J'ai souvent le problème suivant.
Je travaille sur des modifications à un projet qui nécessitent de nouvelles tables ou des colonnes dans la base de données. Je fais les modifications de base de données et de continuer mon travail. Habituellement, je me souviens d'écrire les changements de sorte qu'ils peuvent être répliquées sur le système live. Cependant, je n'ai pas souvenir de ce que j'ai changé et je ne pense pas toujours à écrire.
Donc, je fais une poussée dans le système et d'obtenir une grosse erreur évidente qu'il n'y a pas de NewColumnX
, pouah.
Indépendamment du fait que cela peut ne pas être la meilleure pratique pour ce genre de situation, est-il un système de contrôle de version pour les bases de données? Je ne m'inquiète pas au sujet de la technologie de base de données. Je veux juste savoir si il en existe un. Si il arrive à travailler avec MS SQL Server, puis une grande.
- Voici une autre discussion sur DB de contrôle de version.
- Selon notre thème conseils, "Quelques questions sont toujours hors-sujet, même si elles s'inscrivent dans l'une des catégories énumérées ci-dessus:...Questions nous demandant de recommander ou trouver un livre, un outil, une bibliothèque de logiciels, tutoriel ou d'autres ressources de site sont hors-sujet..."
Vous devez vous connecter pour publier un commentaire.
En Ruby on Rails, il y a une notion de la migration -- un rapide script pour modifier la base de données.
Vous générer un fichier de migration, qui a des règles à accroître la version db (telles que l'ajout d'une colonne) et les règles de dégrader la note de version (comme la suppression d'une colonne). Chaque migration est numéroté, et une table assure le suivi de votre version db.
À migrer, vous exécutez une commande appelée "db:migrate" qui ressemble à votre version et applique les scripts nécessaires. Vous pouvez migrer vers le bas de manière similaire.
Les scripts de migration se sont conservés dans un système de contrôle de version -- chaque fois que vous modifiez la base de données de l'enregistrement d'un nouveau script, et n'importe quel développeur peut l'appliquer à apporter leurs locaux db à la dernière version.
Je suis un peu vieille école, et que j'utilise les fichiers source pour la création de la base de données. Il y a en fait 2 fichiers à un projet de base de données.sql de projets et mises à jour.sql - la première pour le schéma et persistant de données, et le second pour les modifications. Bien sûr, les deux sont sous contrôle de code source.
Lorsque les modifications de base de données, j'ai d'abord mettre à jour le schéma principal d'un projet de base de données.sql, puis copiez les informations pertinentes pour le projet-les mises à jour.sql, par exemple d'instructions ALTER TABLE.
Je peux ensuite appliquer les mises à jour de la base de données de développement, de test, d'itérer jusqu'à ce que bien fait.
Ensuite, vérifiez dans les fichiers, tester à nouveau, et s'appliquent à la production.
Aussi, d'habitude, j'ai une table dans la db - Config - tels que:
SQL
Ensuite, j'ai ajouter la ligne suivante à la section mise à jour:
La
db_version
obtient seulement changé lorsque la base de données est recréé, et ladb_revision
me donne une indication de la façon dont la mesure la db est hors de la ligne de base.Je pouvais garder les mises à jour dans leurs propres fichiers distincts, mais j'ai choisi de les réduire en purée tous ensemble et utiliser cut&pâte pour en extraire les sections pertinentes. Un peu plus d'un service de ménage est dans l'ordre, c'est à dire, supprimer": "à partir de $Revision 1.1 $ pour les figer.
MyBatis (anciennement iBatis) a un schéma de migration, outil pour une utilisation sur la ligne de commande. Il est écrit en java, mais peut être utilisé avec n'importe quel projet.
Redgate a un produit appelé SQL Contrôle de code Source. Il s'intègre avec TFS, SVN, Vault SourceGear, Vault Pro, Mercurial, Perforce, et Git.
Je recommande fortement SQL delta. Je viens de l'utiliser pour générer les diff scripts lorsque j'ai terminé le codage de ma fonction et de vérifier ces scripts dans ma source, outil de contrôle (Mercurial :))
Ils ont à la fois un serveur SQL & Oracle version.
Je me demande ce que personne n'a mentionné l'outil open source liquibase qui est basé sur Java et doivent travailler pour presque toutes les bases de données qui prend en charge de jdbc. Par rapport aux rails, il utilise le langage xml au lieu de rubis pour effectuer les modifications de schéma. Bien que je n'aime pas xml pour le domaine des langues spécifiques à la très cool avantage de xml est que liquibase sait comment faire reculer certaines opérations comme
De sorte que vous n'avez pas besoin de gérer cela de vos propres
Pur sql ou des importations de données sont également pris en charge.
La plupart des moteurs de base de données devrait soutenir le dumping votre base de données dans un fichier. Je sais que MySQL n'a, de toute façon. Ce sera juste un fichier texte, de sorte que vous pourriez soumettre à la Subversion, ou ce que vous utilisez. Il serait facile de faire fonctionner un diff sur les fichiers trop.
Si vous utilisez SQL Server, il serait difficile à battre des Données Mec (aka la Base de données de l'Édition de Visual Studio). Une fois que vous obtenez le coup de lui, de faire un schéma de comparer entre votre source contrôlée par la version de la base de données et la version de production est un jeu d'enfant. Et avec un clic, vous pouvez générer votre diff DDL.
Il y a un enseignement vidéo sur MSDN qui est très utile.
Je sais à propos de DBMS_METADATA et de Crapaud, mais si quelqu'un pouvait venir avec un Mec pour Oracle alors la vie serait vraiment douce.
Avoir vos premières instructions create table dans la version du contrôleur, puis ajouter les instructions alter table, mais ne jamais modifier les fichiers, juste plus de modifier des fichiers idéalement nommés dans l'ordre, ou même comme un "changement", de sorte que vous pouvez trouver tous les changements pour un déploiement particulier.
Les plus robustes de la partie que je peux voir, est suivi de dépendances, par exemple, pour un déploiement particulier de la table B, doivent être mis à jour avant le tableau A.
Pour Oracle, j'utilise Crapaud, ce qui peut générer un schéma à un certain nombre de fichiers distincts (par exemple, un fichier par table). J'ai quelques scripts qui gèrent cette collection en Perforce, mais je pense qu'il devrait être facilement réalisable dans n'importe quel système de contrôle des révisions.
Prendre un coup d'oeil à l'package oracle DBMS_METADATA.
En particulier, les méthodes suivantes sont particulièrement utiles:
DBMS_METADATA.GET_DDL
DBMS_METADATA.SET_TRANSFORM_PARAM
DBMS_METADATA.GET_GRANTED_DDL
Une fois que vous êtes familier avec la façon dont ils travaillent (assez explicite), vous pouvez écrire un script simple pour vider les résultats de ces méthodes dans des fichiers texte qui peuvent être mis sous contrôle de code source. Bonne chance!
Ne sais pas si c'est quelque chose de simple pour MSSQL.
J'écris ma db libération des scripts en parallèle avec le codage, et de garder la libération des scripts dans un projet d'une section spécifique dans SS. Si je fais une modification du code qui nécessite une db modifier, puis-je mettre à jour le script de sortie en même temps.
Avant la libération, je lance le script de sortie sur une surface propre, dev db (copié structure de la production) et de faire mon test final sur elle.
J'ai fait cela pendant des années-gestion (ou d'essayer de gérer) des versions de schémas. Les meilleures approches dépendent des outils que vous avez. Si vous pouvez obtenir la Quête du Logiciel de l'outil "Gestionnaire de Schéma", vous serez en bonne forme. Oracle dispose de sa propre inférieure de l'outil qui est aussi appelé "Schéma Directeur" (confusion bien?) que je ne recommande pas.
Sans un outil automatisé (voir les autres commentaires ici sur les Données Mec), alors vous allez être en utilisant des scripts et des fichiers DDL directement. Choisir une approche, d'un document, et de suivre de manière rigoureuse. J'aime avoir la possibilité de re-créer la base de données à un moment donné, donc je préfère avoir plein DDL exportation de l'ensemble de la base de données (si je suis l'administrateur de la base), ou de l'éditeur de schéma (si je suis dans le développement de produits de mode).
PLSQL Developer, un outil de Tous les Arround Automatismes, a un plugin pour les dépôts qui fonctionne bien ( mais pas beaucoup) avec Visual Source Safe.
http://www.allroundautomations.com/plsvcs.html
ER Studio vous permet d'inverser votre schéma de base de données dans l'outil et que vous pourrez ensuite comparer en direct les bases de données.
Exemple: Inverser le développement de votre schéma en ER Studio -- le comparer à la production et il donnera la liste de toutes les différences. Il peut script les modifications ou tout simplement les pousser à travers automatiquement.
Une fois que vous avez un schéma en ER Studio, vous pouvez enregistrer le script de création ou l'enregistrer en tant que binaire propriétaire et l'enregistrer dans le contrôle de version. Si jamais vous voulez revenir à une version antérieure du système, suffit de le vérifier et de le pousser à votre base de données de la plateforme.
Il y a une PHP5 "migration de base de données-cadre" appelé Ruckusing. Je ne l'ai pas utilisé, mais la exemples montrer l'idée, si vous utiliser la langue pour créer la base de données en cas de besoin, vous n'avez qu'à suivre les fichiers source.
Vous pouvez utiliser Microsoft SQL Server Data Tools dans visual studio pour générer des scripts pour les objets de base de données dans le cadre d'un Projet SQL Server. Vous pouvez ensuite ajouter les scripts de contrôle de code source à l'aide de la source de contrôle de l'intégration, qui est intégré dans visual studio. En outre, SQL Server Projets vous permettent de vérifier les objets de base de données à l'aide d'un compilateur et de générer des scripts de déploiement pour la mise à jour d'une base de données existante ou en créer une nouvelle.
Nous avons utilisé MS Team System Database Edition avec d'assez bons résultats. Il s'intègre avec les TFS de contrôle de version et de Visual Studio, avec plus ou moins de façon transparente et nous permet de nous gère stockées procs, vues, etc., facilement. Résolution d'un conflit peut être une douleur, mais la version de l'histoire est terminée une fois que c'est fait. Par la suite, les migrations à l'assurance qualité et de production sont extrêmement simples.
Il est juste de dire que c'est une version 1.0 produit, cependant, et n'est pas sans quelques problèmes.
Schéma de Comparer for Oracle est un outil spécialement conçu pour migrer les modifications à partir de notre base de données Oracle à l'autre. Veuillez consulter l'URL ci-dessous pour le lien de téléchargement, où vous serez en mesure d'utiliser le logiciel pour un essai, entièrement fonctionnelle.
http://www.red-gate.com/Products/schema_compare_for_oracle/index.htm
En l'absence d'un VCS pour la table modifications que j'ai été la journalisation dans un wiki. Au moins je peux voir quand et pourquoi il a été changé. C'est loin d'être parfait et tout le monde ne le fait, et nous avons de multiples versions du produit en cours d'utilisation, mais mieux que rien.
Je recommande l'une des deux approches. Tout d'abord, investir dans PowerDesigner à partir de Sybase. Enterprise Edition. Il vous permet de concevoir Physique datamodels, et un ensemble beaucoup plus. Mais il est livré avec un référentiel qui permet de vérifier dans vos modèles. Chaque nouvelle case peut être une nouvelle version, on peut comparer une version à une autre version et même à ce qui est dans votre base de données à l'époque. Il présente alors une liste de toutes les différences et de se demander quelle devrait être migré... et puis il génère le script pour le faire. Il n'est pas bon marché mais c'est une bonne affaire à deux fois le prix et il est de retour sur investissement est d'environ 6 mois.
L'autre idée est de tourner sur DDL audit (fonctionne sous Oracle). Cela va créer un tableau avec tous les changements que vous faites. Si vous interrogez les modifications de l'horodatage de la dernière déplacé les modifications de base de données de prod à droite maintenant, vous aurez une liste ordonnée de tout ce que vous avez fait. Quelques clauses where pour éliminer somme nulle modifications, telles que la création de la table foo; suivie par la chute de la table foo; et vous pouvez FACILEMENT construire un mod script. Pourquoi conserver les modifications dans un wiki, c'est le double du travail. Laisser la base de données de la piste pour vous.
Deux des recommandations de livres: "Refactoring" Bases de données par Ambler et Sadalage et "Agile Base de données Techniques" par Ambler.
Quelqu'un a mentionné les Rails de Migrations. Je pense qu'ils travaillent beaucoup, même en dehors des applications Rails. Je les ai utilisés sur une application ASP, SQL Server qui nous ont été dans le processus de déplacement vers les Rails. Vous vérifiez les scripts de migration dans le VCS.
Voici un post par une approche Pragmatique de Dave Thomas sur le sujet.