Utilisez-vous de contrôle à la source pour vos articles de base de données?
J'ai l'impression que ma boutique a un trou parce que nous n'avons pas un solide processus en place pour la gestion des versions de notre schéma de base de données change. Nous faisons beaucoup de sauvegardes de sorte que nous sommes plus ou moins couverts, mais c'est une mauvaise pratique de compter sur votre dernière ligne de défense de cette façon.
Étonnamment, ce qui semble être un dénominateur commun. De nombreux magasins, j'ai parlé d'ignorer cette question parce que leurs bases de données ne changent pas souvent, et ils fondamentalement juste essayer d'être méticuleux.
Cependant, je sais comment cette histoire va. C'est seulement une question de temps avant que les choses s'alignent tout simplement faux et quelque chose vient à manquer.
Sont là des pratiques exemplaires pour cela? Quelles sont les stratégies qui ont fonctionné pour vous?
- Discuté à la fin de Podcast 54. blog.stackoverflow.com/2009/05/podcast-54
Vous devez vous connecter pour publier un commentaire.
Devez lire Obtenez votre base de données sous contrôle de version. Vérifiez la série de messages par K. Scott Allen.
Les bases de données elles-mêmes? Pas de
Les scripts qui créent eux, y compris statique insérer des données, des procédures stockées et des autres; bien sûr. Ils sont des fichiers texte, ils sont inclus dans le projet et sont vérifiés et comme tout le reste.
Bien sûr, dans un monde idéal, votre base de données de l'outil de gestion serait de le faire; mais vous avez juste à être discipliné à ce sujet.
J'adore Rails ActiveRecord migrations. Elle résumés de la DML de script ruby qui peut ensuite être facilement version avait dans le référentiel source.
Cependant, avec un peu de travail, vous pourriez faire la même chose. Toutes les modifications de DDL (ALTER TABLE, etc.) peuvent être stockés dans des fichiers texte. Maintenir un système de numérotation (ou la date) pour les noms de fichiers, et de les appliquer dans l'ordre.
Rails a aussi une "version" de la table dans la base de données qui conserve la trace de la dernière demande de migration. Vous pouvez faire de même facilement.
Découvrez LiquiBase pour la gestion des modifications de base de données à l'aide de contrôle de code source.
Vous ne devriez jamais vous suffit de vous connecter et de commencer la saisie des "ALTER TABLE" commandes pour modifier une base de données de production. Le projet que je suis sur a base de données sur chaque site du client, et donc à chaque changement de la base de données est faite en deux endroits, un fichier de vidage qui est utilisé pour créer une nouvelle base de données sur un nouveau site du client, et un fichier de mise à jour qui est exécuté à chaque mise à jour qui vérifie votre base de données actuelle du numéro de version contre le plus grand nombre dans le fichier, et les mises à jour de votre base de données en place. Ainsi, par exemple, les deux dernières mises à jour:
Je suis sûr qu'il y est une meilleure façon de le faire, mais cela a fonctionné pour moi jusqu'à présent.
begin transaction; ... end transaction;
avec le passage--single-transaction
àpsql
.Oui. Le Code est le Code. Ma règle d'or est que j'ai besoin de être en mesure de construire et de déployer l'application à partir de zéro, sans les regarder, de développement ou de production de la machine.
La meilleure pratique que j'ai vu, c'est la création d'un script de compilation à la ferraille et reconstruire votre base de données sur un serveur de test. Chaque itération a été donné un dossier pour les modifications de base de données, tous les changements ont été scénarisés par "... Créer" de . De cette façon, vous pouvez revenir à une version antérieure à tout moment en pointant le construire pour le dossier que vous voulez version.
Je crois que cela a été fait avec de NaNt/CruiseControl.
OUI, je pense qu'il est important à la version de votre base de données. Pas les données, mais le schéma pour certains.
En Ruby on Rails, c'est géré par le cadre de la "migration". Toutes les fois que vous modifiez la base de données, vous faire un script qui applique les modifications et l'archiver dans le contrôle de source.
Ma boutique aimé cette idée tant que, nous avons ajouté la fonctionnalité de notre Java build à l'aide de scripts shell et Ant. Nous avons intégré les processus dans notre routine de déploiement. Il serait assez facile d'écrire des scripts pour faire la même chose dans d'autres cadres qui ne supportent pas la DB versioning out-of-the-box.
Les nouveaux projets de Base de données dans Visual Studio fournir les sources de contrôler et de modifier les scripts.
Ils ont un bel outil qui permet de comparer les bases de données et permet de générer un script qui convertit le schéma de l'un dans l'autre, ou met à jour les données en un seul pour correspondre à l'autre.
La db schéma est "râpé" pour créer de nombreux, de nombreux petits .sql fichiers, un par commande DDL qui décrit la DB.
+tom
Informations supplémentaires 2008-11-30
J'ai été en utilisant comme développeur pour l'année écoulée et l'aime vraiment. Il est facile de comparer mes travaux de développement de la production et de générer un script à utiliser pour la libération. Je ne sais pas si il manque des fonctions que les Administrateurs de base de données nécessaire pour "entreprise de type" projets de.
Parce que le schéma est "râpé" dans les fichiers sql de commande de la source fonctionne très bien.
Une chasse aux sorcières, c'est que vous avez besoin d'avoir un autre état d'esprit lorsque vous utilisez une base de projet. L'outil a un "db projet" dans VS, qui est juste la sql, plus généré automatiquement la base de données locale qui a le schéma et quelques autres données d'administration, -- mais aucune de vos données d'application, plus votre local dev db que vous utilisez pour les données de l'app dev de travail. Vous le sont rarement au courant de l'généré automatiquement db, mais vous devez connaître son il de sorte que vous pouvez le laisser seul :). Cette spéciale db est clairement reconnaissable car il a un Guid dans son nom,
La VS DB Projet fait un beau travail d'intégration de la db changements que d'autres membres de l'équipe ont fait dans votre projet local/associés db. mais vous avez besoin de prendre l'étape supplémentaire de comparer le projet de schéma avec votre bureau local de dev db schéma et d'appliquer les mods. Il est logique, mais il semble difficile au premier.
DB Projets sont un outil très puissant. Ils ont non seulement générer des scripts mais peut s'appliquer immédiatement. Assurez-vous de ne pas détruire votre base de données de production avec elle. 😉
J'aime vraiment le VS DB projets et je m'attends à utiliser cet outil pour tous mes db projets à l'avenir.
+tom
Nécessitant des équipes de développement d'une base de données SQL source système de gestion de contrôle n'est pas la solution miracle qui permettra d'éviter les problèmes de se produire. Sur son propre, source de base de données de contrôle introduit la charge supplémentaire que les développeurs sont nécessaires pour enregistrer les modifications qu'ils ont apportées à un objet dans un script SQL distincte, ouvrez le système de contrôle de source client, vérifiez dans le fichier de script SQL à l'aide du client, puis appliquer les modifications à la base de données.
Je peux suggérer à l'aide de la SSMS complément appelé ApexSQL Contrôle De Code Source. Il permet aux développeurs de facilement mapper des objets de base de données avec le système de contrôle de source via l'assistant directement à partir de SSMS. Le complément inclut le support pour les TFS, Git, Subversion et d'autres SC systèmes. Il inclut également le support de la source de contrôle des données Statiques.
Après le téléchargement et l'installation de ApexSQL Contrôle de code Source, il suffit de cliquez-droit sur la base de données que vous voulez de contrôle de version et accédez à ApexSQL de Contrôle à la Source des sous-menus dans SSMS. Cliquez sur le Lien de la base de données à l'option contrôle de code source, sélectionnez le système de contrôle de source et du modèle de développement. Après cela, vous aurez besoin de fournir les informations de connexion et le référentiel de chaîne de contrôle de code source du système que vous avez choisi.
Vous pouvez lire cet article pour plus d'informations: http://solutioncenter.apexsql.com/sql-source-control-reduce-database-development-time/
Je n'en enregistrant créer/mettre à jour des scripts et un script qui génère sampledata.
Oui, nous le faisons en gardant notre SQL dans le cadre de notre build -- nous garder de TOMBER.sql, CRÉER.sql, les UTILISATEURS.sql, des VALEURS.sql et le contrôle de version, de sorte que nous pouvons revenir en arrière à tout tagged version.
Nous avons également des tâches ant qui peut de recréer la db chaque fois que nécessaire.
Plus, le SQL est alors étiqueté avec votre code source qui va avec.
Le plus de succès que je ai jamais utilisé sur un projet a combiné les sauvegardes différentielles et les fichiers SQL. Fondamentalement, nous permettrait de faire une sauvegarde de notre db, après chaque mise à jour et de faire un dump SQL de sorte que nous avons pu créer un nouveau schéma à partir de zéro si nous devions ainsi. Chaque fois que vous avez besoin de faire un changement à la base de données, vous devez ajouter un alter sac pour le répertoire sql sous contrôle de version. Nous serions toujours préfixe à un numéro de séquence ou de la date pour le nom de fichier de sorte que la première modification serait quelque chose comme 01_add_created_on_column.sql, et le script suivant serait 02_added_customers_index. Notre IC machine, vérifiez pour ceux-ci et de les exécuter de manière séquentielle sur une nouvelle copie de la db qui avait été restauré à partir de la sauvegarde.
Nous avons aussi eu quelques scripts en place que les devs pourraient utiliser pour re-initialiser leurs locaux db à la version actuelle avec une seule commande.
Nous ne le contrôle de la source de tous nos dabase objets créés. Et, pour garder les développeurs honnête (car vous pouvez créer des objets sans être en Contrôle de code Source), nos administrateurs de base de données régulièrement chercher ce qui n'est pas dans le contrôle de code source, et s'ils trouvent quelque chose, ils abandonnent sans demander si c'est ok.
- Je utiliser SchemaBank de contrôle de version tous mes base de données des modifications de schéma:
Notre équipe de règle est de ne JAMAIS toucher le serveur de base de données directement sans stocker le travail de conception de la première. Mais il arrive, quelqu'un pourrait être tenté de briser la règle, dans un souci de pratique. Nous voudrions importer le schéma de vidage de nouveau dans schemabank et laisser faire la diff et bash quelqu'un si un écart est constaté. Bien que nous avons pu générer les modifier les scripts pour faire notre db, et la conception d'un schéma de synchronisation, nous avons juste la haine que.
Par la manière, elles nous permettent également de créer des succursales, dans le contrôle de version de l'arbre, de sorte que je peux maintenir une mise en scène, et un pour la production. Et un pour le codage de bac à sable.
Une très soigné web basé sur le schéma de l'outil de conception avec le contrôle de version n la gestion du changement.
J'ai tout le nécessaire pour recréer ma DB à partir d'un métal nu, moins les données lui-même. Je suis sûr qu'il ya beaucoup de façons de le faire, mais tous mes scripts sont stockés hors de la subversion et nous pouvons reconstruire la structure DB et tels en tirant sur tout ce qui sort de la subversion et à l'exécution d'un programme d'installation.
En général, je construire un script SQL pour chaque changement que j'ai fait, et un autre pour revenir à ces changements, et de garder ces scripts sous contrôle de version.
Ensuite, nous avons les moyens de créer une nouvelle mise à jour de la base de données sur la demande, et peut facilement se déplacer entre les révisions. Chaque fois que nous faisons un communiqué de presse, nous avons mélangé les scripts (prend un peu de travail manuel, mais il est rarement fait dur) donc nous avons aussi un ensemble de scripts qui peut convertir entre les versions.
Oui, avant de vous le dire, c'est très similaire à la substance des Rails et des autres, mais il semble fonctionner assez bien, donc je n'ai aucun problème à admettre que j'ai sans vergogne soulevé l'idée 🙂
Je utiliser SQL pour CRÉER des scripts exportés à partir de MySQL Workbech, puis à l'aide de leur "Exportation SQL ALTER" fonctionnalité, je me retrouve avec une série de créer des scripts(numérotées de cours) et de modifier les scripts qui peuvent appliquer les modifications entre eux.
Source: MySQL Workbench Community Edition: Guide de la Synchronisation de Schéma
Tous ces scripts sont bien sûr à l'intérieur sous contrôle de version.
Oui, toujours. Vous devriez être en mesure de recréer votre base de données de production de la structure d'un ensemble d'échantillons de données chaque fois que nécessaire. Si vous ne le faites pas, au fil du temps des modifications mineures à garder les choses en cours d'exécution oubliés puis un jour, vous êtes mordus, grand temps. Son assurance que vous ne pourriez pas penser que vous avez besoin mais le jour où vous le faites, il vaut le prix de 10 fois plus!
Il y a eu beaucoup de discussion sur le modèle de base de données elle-même, mais nous avons aussi de garder les données requises .Les fichiers SQL.
Par exemple, pour être utile à votre application peut avoir besoin dans l'installation:
Nous aurions un fichier appelé
currency.sql
en vertu de la subversion. Comme un manuel étape dans le processus de construction, nous comparons la devise précédente.sql la plus récente et d'écrire un script de mise à niveau.Nous version et de contrôle de la source de tout ce qui entoure nos bases de données:
Nous faisons tout cela avec automatisée des emplois à l'aide de Gestionnaire de Modification et quelques scripts personnalisés. Nous avons Changer de Gestionnaire de la surveillance de ces changements et de la notification lorsqu'ils sont effectués.
Je crois que chaque DB doit être sous contrôle de code source et les développeurs devraient avoir un moyen facile de créer leur base de données locale à partir de zéro. Inspiré par Visual Studio pour la Base de données des Professionnels, j'ai créé un outil open-source que les scripts de bases de données MS SQL, et fournit un moyen facile et de les déployer dans votre local du moteur DB. Essayez http://dbsourcetools.codeplex.com/ . Amusez-vous,
- Nathan.
Si votre Base de données SQL Server, il est peut-être la solution que vous cherchez. SQL Source Control 1.0 a été publié.
http://www.red-gate.com/products/SQL_Source_Control/index.htm
Ce qui s'intègre dans SSMS et fournit la colle entre les objets de base de données et votre CV. Le "script" se passe de manière transparente (il utilise le SQL de Comparer moteur sous le capot), ce qui devrait le rendre aussi simples à utiliser que les développeurs ne seront pas découragés de l'adoption du processus.
Une alternative de solutions de Visual Studio est ReadyRoll, qui est mis en œuvre comme un sous-type de la SSDT Projet de Base de données. Cela prend un des migrations de l'approche axée sur la, qui est plus adapté aux besoins d'automatisation des équipes DevOps.
Je contrôle à la source du schéma de base de données par le script tous les objets (les définitions des tables, des index, des procédures stockées, etc.). Mais, comme pour les données lui-même, il suffit de s'appuyer sur des sauvegardes régulières. Cela garantit que tous les changements structurels sont capturées avec une bonne révision de l'histoire, mais ne prend pas en charge la base de données à chaque fois que des modifications de données.
À notre entreprise, nous utilisons la base de données des scripts de modification. Lorsqu'un script est exécuté, c'est le nom est stocké dans la base de données et de ne pas courir à nouveau, sauf si la ligne est supprimée. Les Scripts sont nommés en fonction de la date, l'heure et le code de la branche, contrôlée de l'exécution est possible.
Des tas et des tas de test est fait avant que les scripts sont exécutés dans l'environnement réel, de sorte que "oopsies" ne se produisent, de façon générale, sur le développement de bases de données.
Nous sommes dans le processus de déplacement de toutes les bases de données à la source. Nous utilisons sqlcompare de script de la base de données (une profession édition fonctionnalité, malheureusement) et de mettre ce résultat dans le SVN.
La réussite de votre mise en œuvre dépendra beaucoup sur la culture et les pratiques de votre organisation. Les gens d'ici croient en la création d'une base de données par application. Il existe un ensemble commun de bases de données qui sont utilisés par la plupart des applications ainsi causant beaucoup de interdatabase dépendances (certains d'entre eux sont de forme circulaire). Mettre les schémas de base de données dans la source de contrôle a été notoirement difficile à cause de la interdatabase dépendances que nos systèmes ont.
Bonne chance à vous, le plus tôt vous l'essayer le plus tôt vous aurez vos questions triés.
J'ai utilisé le dbdeploy outil de ThoughtWorks à http://dbdeploy.com/. Il encourage l'utilisation de scripts de migration. Chaque version, nous avons consolidé les scripts de modification dans un fichier unique pour faciliter la compréhension et pour permettre aux Administrateurs de base de données à "bénir" les changements.
Cela a toujours été un grand ennui pour moi aussi, il me semble qu'il est juste trop facile de faire un changement rapide de votre base de données de développement, de l'enregistrer (oublier d'enregistrer une modification de script), et puis vous êtes coincé. Vous pouvez annuler ce que vous venez de faire et refaire pour créer le script de modification, ou de l'écrire à partir de zéro si vous le souhaitez bien sûr aussi, mais c'est beaucoup de temps passé à l'écriture de scripts.
Un outil que j'ai utilisé dans le passé qui a aidé avec ce quelque soit SQL Delta. Il va vous montrer les différences entre les deux bases de données (SQL server/Oracle, je crois) et de générer tous les scripts de modification nécessaire à la migration d'Un->B. une Autre belle chose qu'il fait est de montrer toutes les différences entre la base de données de contenu entre la production (ou test) DB et le développement de votre DB. Puisque de plus en plus d'applications stockent des informations de configuration et de l'état qui est indispensable à leur exécution dans les tables de base de données, il peut être une vraie douleur pour avoir des scripts de modification de supprimer, d'ajouter et de modifier le bon de lignes. SQL Delta affiche les lignes dans la base de données tout comme ils le feraient regarder dans un outil de comparaison - modifié, ajouté, supprimé.
Un excellent outil. Voici le lien:
http://www.sqldelta.com/
RedGate est grande, nous créons de nouvelles photos de la base de données des modifications sont apportées (un petit fichier binaire) et de garder ce fichier dans les projets en tant que ressource. Chaque fois que nous avons besoin de mettre à jour la base de données, nous utilisons RedGate la trousse à outils pour mettre à jour la base de données, ainsi que d'être capable de créer de nouvelles bases de données et les vides.
RedGate également fait des clichés de Données, alors que je n'ai pas personnellement travaillé avec eux, ils sont tout aussi robuste.
Pour info Cela a également été mis en place il y a quelques jours par Dana ... Procédures stockées/DB schéma du contrôle de code source
Voici un exemple du pauvre solution pour déclencher la mise en œuvre du suivi des modifications apportées sur db objets ( par le biais de DDL stateements ) sur un serveur sql server 2005 /2008 de la base de données. J'contient également un exemple simple de comment appliquer l'utilisation d'nécessaire someValue balise xml dans le code source pour chaque commande sql exécuté sur la base de données + le suivi de l'actuelle version db et le type ( dev , test , qa , fb , prod)
On pourrait l'étendre avec des attributs requis supplémentaires comme , etc.
Le code est assez long, il crée la base de données vide + le nécessaire suivi de la structure de la table + requis db fonctions et le remplissage de déclencher tous en cours d'exécution en vertu d'un [ga] schéma.
Alors que cette question a beaucoup de bonnes réponses, la plupart d'entre eux ne comprennent pas les innovations, les changements dans le marché, en particulier avec les outils commerciaux.
Voici une courte liste des outils de base de données de contrôle de version, j'ai énuméré les avantages et les inconvénients de chacun (plein divulgateur: je travaille pour DBmaestro)
Rouge-Porte – a été sur le marché depuis de nombreuses années. Il assure le contrôle des versions des objets de base de données à l'aide de scripts intégrés à base de fichiers de contrôle de version.
DBVS – assure le contrôle des versions des objets de base de données à l'aide de scripts intégrés à base de fichiers de contrôle de version.
DBmaestro – Fournit une application de la version des processus de contrôle (check-out /check-in) sur les véritables objets de base de données. Donc il n'est pas question de savoir si le référentiel de contrôle de version est en synchronisation avec la base de données utilisée par l'application.
Je vous encourage à lire exhaustives, impartiales de l'examen sur la Base de données Appliquées solutions de Gestion des modifications par le vétéran de la base de données d'experts Ben Taylor qu'il a posté sur LinkedIn https://www.linkedin.com/pulse/article/20140907002729-287832-solve-database-change-mangement-with-dbmaestro
Oui ... nos bases de données sont conçus dans ERwin et les DDLs de chaque version sont générés automatiquement. L'ERwin fichiers sont conservés dans notre code source du système de contrôle (en fait, ce sont nos documents d'ingénierie).
Nous l'utilisation de la réplication et de clustering pour gérer nos bases de données, ainsi que les sauvegardes. Nous utilisons Serena pour gérer nos scripts SQL et de la configuration des mises en œuvre. Avant la modification de la configuration, nous avons effectuer une sauvegarde dans le cadre du processus de gestion du changement. Cette copie de sauvegarde de satisfaire notre restauration exigence.
Je pense que tout dépend de l'échelle. Parlez-vous des applications d'entreprise qui ont besoin d'effectuer des sauvegardes hors site et de reprise après sinistre? Un petit groupe de travail de l'exécution d'une application de comptabilité? Ou partout entre les deux?
Nous avons notre de Créer/Modifier des scripts sous contrôle de code source. Comme pour la base de données elle-même, lorsque vous avez des centaines de tables et beaucoup de traitement de données de toutes les minutes, il serait CPU et du disque dur killer pour version tous la base de données. C'est pourquoi la sauvegarde est toujours, selon moi, la meilleure façon de contrôler vos données.
Je vérifie toujours mes structure de base de données décharges dans le contrôle de source. Base de données complète des dumps cependant j'ai l'habitude de compresser et de les mettre à l'écart pour le stockage.
Mon équipe versions de notre schéma de base de données que les classes C# avec le reste de notre code. Nous avons une maison programme C# (<500 lignes de code) qui reflète les classes et crée des commandes SQL pour construire, en baisse et la mise à jour de la base de données. Après la création de la base de données, nous courons sqlmetal pour générer une linq cartographie, qui est ensuite compilé dans un autre projet qui est utilisé pour générer des données de test. Le tout fonctionne vraiment bien parce que l'accès aux données est vérifiée au moment de la compilation. Nous l'aimons parce que le schéma est stocké dans un .cs fichier qui est facile à suivre comparer trac/svn.
RedGate logiciel fait d'excellents outils qui vous aideront à la version de votre base de données. Assurez-vous d'essayer d'avoir votre devs construire leur propre isolé des bases de données locales pour les travaux de développement plutôt que de compter sur un "serveur de dev", qui peut ou peut ne pas être jusqu'à un certain temps.
J'ai utilisé RedGate SQL de Comparer Pro pour le schéma de synchronisation avec le dossier de script, puis je remets tous mes mise à jour pour le contrôle de version. Il fonctionne très bien.
"Version courte: un dump de votre base de données de production dans un dépôt git pour un instant solution de sauvegarde."
Je suis d'accord avec beaucoup de détachement concernant ruby ActiveRecord migrations - ils sont une manière élégante de gérer la base de données dans de petits fichiers incrémentiels que tout le monde peut partager. Cela dit, j'ai récemment mis en œuvre un projet à l'aide de VisualStudio du Projet de Base de données, et c'est un peu fait de moi un croyant. Histoire courte - vous de créer un projet de base de données, l'importation de tous (le cas échéant) de base de données existant objets (tables/vues/triggers/keys/utilisateurs/etc). Que d'importer les résultats dans une "Créer" script "par objet". Pour gérer la base de données que vous pouvez modifier la créer un script, puis sur déployer VS compare la base de données cible à l'état de la base de données résidant dans votre projet et demander le bon de modifier les déclarations.
C'est vraiment un peu de magie et je dois admettre que c'est l'une des meilleures choses de la VS équipe a fait. Je suis vraiment impressionné jusqu'à ce point.
Bien sûr, vous pouvez gérer l'ensemble du projet de base de données dans le système de contrôle de version de votre choix.
J'ai commencé à travailler sur sqlHawk qui est destiné à fournir (open source) de l'outillage autour de ce problème.
Il est actuellement en assez les premiers stades, mais ne prennent déjà en charge le stockage et l'application de procédures stockées et en cours d'exécution de script mises à jour.
Je lui en serais reconnaissant pour toute contribution de quelqu'un qui a le temps de regarder cet outil.
Excuses pour flagrant de l'auto-promotion, mais j'espère que cela est utile à quelqu'un!
Wow, que de réponses. Pour la solidité de la base de données de gestion des versions, vous devez contrôler la version du code qui modifie votre base de données. Certains CMS offrent des outils de gestion de configuration, tels que celui de Drupal 8. Voici un aperçu des mesures concrètes pour organiser votre flux de travail et de veiller à la base de données de configuration est versionné, même dans des environnements d'équipe:
Nous avons un hebdomadaire de sql dump dans une subversion des pensions. Il est entièrement automatisé, mais c'est VRAIMENT costaud tâche.
Vous voulez limiter le nombre de révisions parce que c'est vraiment chows de l'espace disque après un certain temps!
J'ai la version de contrôle de la créer un script, et j'ai utiliser la version svn de la balise à l'intérieur. Ensuite, chaque fois que j'ai une version qui va être utilisé, j'ai créer un script dans un dbpatches/répertoire nommé comme la version de rouler jusqu'à. Le travail de ce script est de modifier une base de données en cours sans détruire les données. dbpatches/, par exemple, pourrait avoir des fichiers nommés 201, 220 et 240. Si la base de données est actuellement au niveau 201, appliquez le patch 220, puis patch 240.
N'oubliez pas de tester votre code avant d'envisager un patch bien. Caveat emptor!
En règle générale, nous gardons tous de notre code objet (procédures stockées, vues, triggers, fonctions, etc.) dans le contrôle de source parce que ces objets sont de code, et comme sur tous les autres réponse ici est d'accord, le code appartient à une certaine forme de système de contrôle de version.
Que pour CRÉER, supprimer, MODIFIER des déclarations, etc. (DDL), nous avons développé et l'utilisation BuildMaster de gérer le déploiement de ces scripts tels qu'ils peuvent être exécutés une fois et seulement une fois contre un objectif de base de données (si elles échouent ou pas). L'idée générale est que les développeurs de télécharger des scripts de modification dans le système et lorsque vient le temps de déploiement, seule la modification des scripts qui n'ont pas été exécutée à l'encontre de l'environnement cible de la base de données sera exécutée (c'est géré de façon très similaire aux La réponse de l'autocratie). La raison de cette séparation des types de script réside dans le fait qu'une fois que vous manipuler la structure d'une table, d'ajouter un index, etc., vous ne pouvez pas annuler que sans l'écriture d'une nouvelle marque de script, ou de la restauration de la base de données - par opposition à l'objet du code où vous pouvez simplement déposer une vue ou d'une procédure stockée, puis de le recréer.
Certains des avantages peut être vu quand, par exemple, de la restauration de la base de données de production dans votre environnement d'intégration, le système automatiquement sait exactement les scripts n'ont pas été exécutés et modifier la structure des tables de la base de données nouvellement restaurée pour être à jour en ce qui concerne le développement.
Nous insistons sur le changement de scripts, et un maître de définition de données de script. Ce sont vérifiées dans le CVS, ainsi que toute autre source code. Le PL/SQL (ont été sont un Oracle de la boutique) est également source contrôlée dans le CVS. Les scripts de modification sont reproductibles et peuvent être transmises à tout le monde sur l'équipe. Fondamentalement, tout simplement parce que c'est une base de données, il n'est jamais une excuse pour ne pas le coder et utiliser un système de contrôle de source pour suivre les changements.
Nous maintenir DDL (et parfois DML) des scripts générés par notre ER Outil (PowerAMC).
Nous avons un banc de scripts shell qui renommer les scripts commençant par un numéro sur le tronc de la branche.
Chaque script est engagé et marqué avec le bugzilla nombre.
Ces scripts sont alors à besoin pour se fondre dans la libération des branches avec le code de l'application.
Nous avons un tableau d'enregistrement des scripts et leur statut.
Chaque script est exécuté dans l'ordre et comptabilisés dans ce tableau sur chaque installation par le déploiement de l'outil.
Votre équipe de projet peut avoir un DBA pour qui chaque développeur devra faire parvenir leur créer modifier, supprimer, insérer/mettre à jour (pour les données de base d'instructions sql. Administrateurs de base de données permettrait d'exécuter ces requêtes et réussi à faire la mise à jour requise serait ajouter ces instructions dans un fichier texte ou un tableur. L'ajout de chaque produit peut être étiqueté comme un point de sauvegarde. Incase vous revenir à un point de sauvegarde, il suffit de faire une chute de tous et d'exécuter les requêtes uptil labellisés point de sauvegarde. Cette approche est juste une pensée... un peu de fine tuning ici serait de travailler pour votre environnement de développement.
Toute la base de données de code de l'interface devrait absolument aller dans le contrôle de version (Procédures Stockées, Fonctions, etc).
De la structure et de données, c'est un jugement d'appel. J'ai personnellement garder propre modèle structurel de mes bases de données, mais ne les stockez pas dans le contrôle de version, en raison de la taille. Mais le stocker dans le contrôle de version peut être très bénéfique, même pour juste avoir une histoire.
Un gros problème, souvent négligé, est que pour les grandes basé sur le web des systèmes, il est nécessaire d'avoir une période de transition ou un seau de l'approche des tests à faire de nouvelles versions. Il est donc essentiel d'avoir à la fois la restauration et un mécanisme pour soutenir à la fois l'ancien et le nouveau schéma dans la même DB. Cela nécessite un échafaudage approche (fait populiste par l'Agile DB gens). Dans ce scénario, l'absence de processus en DB contrôle de la source peut être un désastre total. Vous avez besoin d'ancien schéma de scripts, de nouveaux scripts de schéma et d'un ensemble d'intermédiaires scripts, ainsi que d'un ranger, une fois que le système est entièrement sur la nouvelle version (ou annulée).
Plutôt que d'avoir des scripts pour recréer le schéma à partir de zéro, ce qui est nécessaire est un état fondé de l'approche, où vous avez besoin de scripts purement pour déplacer la DB dans l'état dont vous avez besoin, à la fois en avant et en arrière, à partir d'une version à l'autre. Votre DB devient une série d'etat scripts, ce qui peut être facilement contrôlés et marqués le long avec le reste de la source.
Oui, bien sûr. Nous générer des décharges de notre PostgreSQL schémas chaque fois qu'il y a du changement et de l'archiver. Il est déjà sauvé de nombreuses fois, et je ne suis à mon travail quelques mois.
Malheureusement, j'ai vu plus d'une équipe de développement de programmes PL/SQL (procédures stockées dans Oracle) - parfois des dizaines de milliers de LOC - juste en modifiant le code en CRAPAUD (un outil de base de données), sans même l'enregistrement de la source pour les fichiers (sauf pour le déploiement). Même si la base de données sauvegardés régulièrement (ne pas tenir cela pour acquis, tout de même), le seul moyen de récupérer une ancienne version d'une procédure stockée est de restaurer la totalité de la base de données, ce qui est plusieurs GO de grandes. Et bien sûr, parfois des changements simultanés dans un fichier conduire à la perte de travail, lorsque plus d'un développeur travaille sur le même projet.
- Je utiliser ActiveRecord Migrations. Cette Ruby gem peut être utilisé en dehors d'un Rails de projet et il y a des adaptateurs pour traiter la plupart des bases de données, vous allez venir à travers. Mon conseil: si vous êtes en mesure d'exécuter votre projet Postgres, vous obtenez transactionnelle schéma des migrations. Cela signifie que vous ne finissent pas avec une fracture de la base de données si une migration qu'à moitié s'applique.
L'un de Kira est le premier cas d'utilisation de base de données mises à jour en spécifier explicitement le schéma à l'extérieur de la base de données de code. Ensuite, il peut gérer la base de données et de mise à niveau à une version à partir de n'importe quelle version.
Oui, nous avons de contrôle à la source de nos scripts sql trop avec subversion. C'est une bonne pratique, et vous pouvez recréer le schéma avec les données par défaut chaque fois que nécessaire.
Pour oracle-je utiliser l'auto-écrit en java programm oracle-ddl2svn automatique des changements de trajectoire oracle DDL régime SVN
J'ai entendu des gens dire que vous devez absolument garder vos schémas de la base de données. Je ne suis pas sûr que je suis d'accord. Cela dépend vraiment sur le système sur lequel vous travaillez. Si votre système est relativement faible et les données n'est pas très important. Et la vitesse à laquelle vous devez apporter un autre environnement de développement en ligne est cruciale.. alors oui.. vous pouvez en bénéficier. Toutefois, lorsque votre schéma est inutile en l'absence de données et de la base de données est très grand, il devient pratiquement impossible de "source contrôle" de votre base de données. Bien sûr, vous pouvez toujours garder votre code DDL contrôle de code source, mais c'est essentiellement inutiles. Vous ne pouvez pas obtenir les données nécessaires sans une sauvegarde/restauration.
Dans la plus grande base de données efforts de développement, j'ai trouvé de sauvegarde et de restauration comme la meilleure option reprise. Bien sûr, vous pouvez garder procs, vues, fonctions, etc dans le contrôle de code source, mais en gardant la table.sql n'est pas nécessaire. Aussi, si votre processus de déploiement est étanche à l'air, vous aurez plus de chances de ne jamais la "restauration" de votre environnement de production.