Utilisez-vous le contrôle à la source pour les éléments de votre base de données? [fermé]

je sens que mon magasin a un trou parce que nous n'avons pas un processus solide en place pour versionner nos modifications de schéma de base de données. 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, cela semble être un fil 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 se passe. Ce n'est qu'une question de temps avant que les choses ne s'alignent mal et que quelque chose disparaisse.

quels Sont les meilleures pratiques? Quelles sont les stratégies qui ont fonctionné pour vous?

567
demandé sur Brian MacKay 2008-09-22 19:07:33
la source

30 ответов

doit se lire obtenez votre base de données sous le contrôle de version . Consultez la série de billets de K. Scott Allen.

en ce qui concerne le contrôle de version, la base de données est souvent un citoyen de deuxième ou même de troisième classe. D'après ce que j'ai vu, des équipes qui ne penseraient jamais à écrire du code sans contrôle de version dans un million d'années-- et à juste titre-- peuvent être complètement inconscientes de la nécessité d'un contrôle de version autour des bases de données critiques leurs applications reposent sur. Je ne sais pas comment vous pouvez vous appeler un ingénieur logiciel et maintenir un visage droit quand votre base de données n'est pas exactement le même niveau rigoureux de contrôle des sources que le reste de votre code. Ne laissez pas cela vous arriver. Obtenez votre base de données sous le contrôle de la version.

372
répondu Gulzar Nazim 2014-05-19 18:58:07
la source

les bases de données elles-mêmes? N ° 151910920"

les scripts qui les créent, y compris les inserts de données statiques, les procédures stockées et 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 outil de gestion de base de données ferait cela, mais il vous suffit d'être discipliné à ce sujet.

133
répondu blowdart 2008-09-22 19:09:22
la source

j'adore les Rails ActiveRecord migrations. Il résume le DML au script ruby qui peut alors être facilement modifié dans votre dépôt source.

, Cependant, avec un peu de travail, vous pourriez faire la même chose. Tout changement DDL (modifier la TABLE, etc.) peuvent être stockées dans des fichiers texte. Conservez un système de numérotation (ou un tampon de date) pour les noms de fichiers et appliquez-les en séquence.

Les Rails

ont aussi une table "version" dans le DB qui garde la trace de la dernière migration appliquée. Vous pouvez faire la même chose facilement.

34
répondu Matt Rogish 2009-12-17 18:40:43
la source

Check out LiquiBase pour la gestion des modifications de base de données à l'aide de contrôle de code source.

32
répondu killdash10 2008-09-22 22:12:38
la source

vous ne devez jamais simplement vous connecter et commencer à saisir des commandes" modifier une TABLE " pour modifier une base de données de production. Le projet sur lequel je suis a base de données sur chaque site client, et donc chaque changement à la base de données est fait dans deux endroits, un fichier dump qui est utilisé pour créer une nouvelle base de données sur un nouveau site client, et un fichier de mise à jour qui est exécuté sur chaque mise à jour qui vérifie votre numéro de version de base de données actuelle contre le nombre le plus élevé dans le fichier, et les mises à jour de votre base de données en place. Ainsi, par exemple,, les dernières mises à jour:

if [ $VERSION \< '8.0.108' ] ; then
  psql -U cosuser $dbName << EOF8.0.108
    BEGIN TRANSACTION;
    --
    -- Remove foreign key that shouldn't have been there.
    -- PCR:35665
    --
    ALTER TABLE     migratorjobitems
    DROP CONSTRAINT migratorjobitems_destcmaid_fkey;
    -- 
    -- Increment the version
    UPDATE          sys_info
    SET             value = '8.0.108'
    WHERE           key = 'DB VERSION';
    END TRANSACTION;
EOF8.0.108
fi

if [ $VERSION \< '8.0.109' ] ; then
  psql -U cosuser $dbName << EOF8.0.109
    BEGIN TRANSACTION;
    --
    -- I missed a couple of cases when I changed the legacy playlist
    -- from reporting showplaylistidnum to playlistidnum
    --
    ALTER TABLE     featureidrequestkdcs
    DROP CONSTRAINT featureidrequestkdcs_cosfeatureid_fkey;
    ALTER TABLE     featureidrequestkdcs
    ADD CONSTRAINT  featureidrequestkdcs_cosfeatureid_fkey
    FOREIGN KEY     (cosfeatureid)
    REFERENCES      playlist(playlistidnum)
    ON DELETE       CASCADE;
    --
    ALTER TABLE     ticket_system_ids
    DROP CONSTRAINT ticket_system_ids_showplaylistidnum_fkey;
    ALTER TABLE     ticket_system_ids
    RENAME          showplaylistidnum
    TO              playlistidnum;
    ALTER TABLE     ticket_system_ids
    ADD CONSTRAINT  ticket_system_ids_playlistidnum_fkey
    FOREIGN KEY     (playlistidnum)
    REFERENCES      playlist(playlistidnum)
    ON DELETE       CASCADE;
    -- 
    -- Increment the version
    UPDATE          sys_info
    SET             value = '8.0.109'
    WHERE           key = 'DB VERSION';
    END TRANSACTION;
EOF8.0.109
fi

je suis sûr qu'il y a une meilleure façon de le faire, mais ça a marché pour moi jusqu'à présent.

29
répondu Paul Tomblin 2008-09-22 19:15:37
la source

Oui. Le Code est le code. Ma règle de base est que je dois être en mesure de construire et de déployer l'application à partir de zéro , sans regarder une machine de développement ou de production.

15
répondu Stu Thompson 2008-09-22 19:12:50
la source

la meilleure pratique que j'ai vu est de créer un script de construction pour supprimer et reconstruire votre base de données sur un serveur de mise en scène. Chaque itération a été donnée un dossier pour les changements de base de données, tous les changements ont été scriptés avec "Drop... Créer". 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 NaNt/CruiseControl.

14
répondu Sara Chipps 2008-09-22 19:11:58
la source

Oui, je pense qu'il est important de modifier votre base de données. Pas les données, mais le schéma pour certains.

dans Ruby On Rails, cela est géré par le cadre avec "migrations". Chaque fois que vous modifiez la base de données, vous créez un script qui applique les modifications et le vérifiez dans le contrôle source.

mon magasin a tellement aimé cette idée que nous avons ajouté la fonctionnalité à notre construction basée sur Java en utilisant des scripts shell et Ant. Nous avons intégré le 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 les DB versioning out-of-the-box.

11
répondu Pete 2017-05-23 15:10:47
la source

les nouveaux projets de base de données dans Visual Studio fournissent le contrôle de source et les scripts de changement.

ils ont un bel outil qui compare des bases de données et peut générer un script qui convertit le schéma de l'un dans l'autre, ou met à jour les données dans l'un pour correspondre à l'autre.

le schéma db est" déchiqueté " pour créer beaucoup, beaucoup de petits .fichiers sql, un par commande DDL qui décrit la base de données.

+ tom


informations supplémentaires 2008-11-30

Je l'utilise comme développeur depuis un an et je l'aime vraiment. Cela rend facile de comparer mon travail dev à la production et de générer un script à utiliser pour la sortie. Je ne sais pas s'il manque des fonctionnalités dont les AD ont besoin pour les projets de type "entreprise".

parce que le schéma est "déchiqueté" dans les fichiers sql le contrôle source fonctionne très bien.

un gotcha est que vous besoin d'avoir un autre état d'esprit lorsque vous utilisez une base de projet. L'outil a un "projet de base de données" dans VS, qui est juste le sql, plus une base de données locale générée automatiquement qui a le schéma et quelques autres données d'administrateur -- mais aucune de vos données d'application, plus votre base de données dev locale que vous utilisez pour le travail de développement de données d'application. Vous êtes rarement au courant du db généré automatiquement, mais vous devez le connaître pour pouvoir le laisser tranquille :). Ce db spécial est clairement reconnaissable parce qu'il a une Guid dans son nom,

le projet VS DB fait un bon travail d'intégration des changements db que d'autres membres de l'équipe ont fait dans votre projet local/db associé. mais vous devez prendre l'étape supplémentaire pour comparer le schéma de projet avec votre schéma de développement local et appliquer les mods. C'est logique, mais ça semble bizarre au début.

DB projets sont un outil très puissant. Non seulement ils génèrent des scripts, mais ils peuvent les appliquer immédiatement. Assurez-vous de ne pas détruire votre base de données de production. ;)

j'aime vraiment les projets VS DB et je m'attends à utiliser cet outil pour tous mes projets db à l'avenir.

+ tom

8
répondu Tom A 2008-11-30 22:56:38
la source

exiger des équipes de développement qu'elles utilisent un système de gestion du contrôle des sources de la base de données SQL n'est pas la solution miracle qui empêchera les problèmes de se produire. En soi, le contrôle source de base de données introduit des frais généraux supplémentaires que les développeurs sont nécessaires pour enregistrer les changements qu'ils ont faits à un objet dans un script SQL séparé, ouvrir le client du système de contrôle source, vérifier le fichier de script SQL en utilisant le client et ensuite appliquer les changements à la base de données en direct.

Je peux suggérer l'utilisation de L'add-in SSMS appelé ApexSQL Source Control . Il permet aux développeurs de cartographier facilement des objets de base de données avec le système de contrôle source via L'Assistant directement à partir de SSMS. L'add-in inclut la prise en charge de TFS, Git, Subversion et d'autres systèmes SC. Il comprend également un support pour le contrôle des données statiques à la source.

après avoir téléchargé et installé ApexSQL Source Control, cliquez simplement avec le bouton droit de la souris sur la base de données que vous souhaitez contrôler la version et naviguez vers le sous-menu de contrôle Source ApexSQL dans SSMS. Cliquez sur le lien de la base de données à l'option de contrôle source, sélectionnez le système de contrôle source et le modèle de développement. Après cela, vous aurez besoin de fournir les informations de connexion et la chaîne de dépôt pour le système de contrôle source que vous avez choisi.

vous pouvez lire cet article pour plus d'information: http://solutioncenter.apexsql.com/sql-source-control-reduce-database-development-time /

8
répondu AliceF 2015-09-07 13:43:12
la source

je le fais en sauvegardant les scripts create/update et un script qui génère sampledata.

6
répondu Paco 2008-09-22 19:09:55
la source

Oui, nous le faisons en gardant notre SQL dans le cadre de notre construction -- nous gardons le dépôt.sql, créer.sql, les UTILISATEURS.sql, des VALEURS.sql et la version contrôlent ces derniers, de sorte que nous pouvons revenir à n'importe quelle version étiquetée.

nous avons aussi des tâches de fourmi qui peuvent recréer le db chaque fois que nécessaire.

de plus, le SQL est alors étiqueté avec votre code source qui va avec.

6
répondu DustinB 2008-09-22 19:10:35
la source

nous contrôlons à la source tous les objets créés par dabase. Et juste pour garder les développeurs honnêtes (parce que vous pouvez créer des objets sans qu'ils soient dans le contrôle Source), nos DBA cherchent périodiquement tout ce qui n'est pas dans le contrôle source et s'ils trouvent quelque chose, ils le laissent tomber sans demander si c'est ok.

6
répondu HLGEM 2008-09-22 19:25:38
la source

le schéma le plus réussi que j'ai utilisé sur un projet a combiné des sauvegardes et des fichiers SQL différentiels. Fondamentalement, nous prendrions une sauvegarde de notre db après chaque libération et faire un dump SQL de sorte que nous pourrions créer un schéma Vierge à partir de zéro si nous avions besoin pour ainsi. Ensuite, à chaque fois que vous avez besoin de faire une modification à la base de données, vous ajouteriez un alter scrip au répertoire sql sous le contrôle de version. Nous préfixions toujours un numéro de séquence ou une date au nom du fichier de sorte que le premier changement serait quelque chose comme 01_add_created_on_column.sql, et le script suivant serait 02_added_customers_index. Notre machine à C. I. vérifiait ces derniers et les exécutait de façon séquentielle sur une nouvelle copie de la base de données qui avait été restaurée à partir de la sauvegarde.

nous avions aussi quelques scripts en place que les développeurs pouvaient utiliser pour ré-initialiser leur db locale à la version actuelle avec une seule commande.

5
répondu Mike Deck 2008-09-22 19:13:23
la source

j'ai tout ce qu'il faut pour recréer mon DB à partir de métal nu, moins les données elles-mêmes. Je suis sûr qu'il y a beaucoup de façons de le faire, mais tous mes scripts et autres sont stockés dans subversion et nous pouvons reconstruire la structure de la base de données et ainsi de suite en retirant tout cela de subversion et en exécutant un programme d'installation.

4
répondu itsmatt 2008-09-22 19:12:45
la source

je construis typiquement un script SQL pour chaque changement que je fais, et un autre pour revenir sur ces changements, et garder ces scripts sous le contrôle de la version.

alors nous avons un moyen de créer une nouvelle base de données à jour sur demande, et peut facilement passer d'une révision à l'autre. Chaque fois que nous faisons une version, nous regroupons les scripts ensemble (prend un peu de travail manuel, mais il est rarement en fait dur ) donc nous avons également un ensemble de scripts qui peuvent convertir entre version.

Oui, avant que vous ne le disiez, c'est très similaire à ce que font les Rails et les autres, mais cela semble fonctionner assez bien, donc je n'ai aucun problème à admettre que j'ai soulevé l'idée sans vergogne:)

4
répondu Dan 2008-09-22 19:15:38
la source

J'utilise SQL créer des scripts exportés de MySQL Workbech, puis en utilisant leur fonctionnalité" Export SQL ALTER " je me retrouve avec une série de scripts de création(numérotés bien sûr) et les scripts alter qui peuvent appliquer les changements entre eux.

3.- Exporter SQL ALTER script Normalement, vous devriez écrire les énoncés de table D'ALTER à la main maintenant, reflétant vos changements que vous avez faits au modèle. Mais vous pouvez être intelligent et laisser Workbench faire le travail pour vous. Il suffit de sélectionner File -> Export -> Forward Engineer SQL ALTER Script... à partir du menu principal.

cela vous invitera à spécifier le fichier SQL CREATE auquel le modèle courant doit être comparé.

sélectionnez le script SQL CREATE à partir de l'étape 1. L'outil générera alors le script ALTER TABLE pour vous et vous pouvez exécuter ce script contre votre base de données pour le mettre à jour.

vous pouvez le faire en utilisant la requête MySQL Navigateur ou le client mysql.Voila! Votre modèle et votre base de données sont maintenant synchronisés!

Source: MySQL Workbench Community Edition: Guide to Schema Synchronization

tous ces scripts sont bien sûr à l'intérieur sous contrôle de version.

4
répondu levhita 2008-09-22 21:30:01
la source

oui, toujours. Vous devriez être en mesure de recréer la structure de votre base de données de production avec un ensemble utile de données d'échantillon chaque fois que nécessaire. Si vous ne le faites pas, avec le temps des changements mineurs pour garder les choses en marche sont oubliés puis un jour vous êtes mordu, grand temps. Son assurance que vous pourriez ne pas penser que vous avez besoin, mais le jour où vous le faites il vaut le prix 10 fois plus!

4
répondu AndrewB 2008-09-23 00:29:56
la source

il y a eu beaucoup de discussions sur le modèle de base de données lui-même, mais nous conservons également les données requises .Les fichiers SQL.

par exemple, pour être utile, votre application pourrait avoir besoin de ceci dans l'installation:

INSERT INTO Currency (CurrencyCode, CurrencyName) 
VALUES ('AUD', 'Australian Dollars');

INSERT INTO Currency (CurrencyCode, CurrencyName) 
VALUES ('USD', 'US Dollars');

nous aurions un fichier appelé currency.sql sous subversion. Comme une étape manuelle dans le processus de construction, nous comparons la monnaie précédente.sql la plus récente et d'écrire un script de mise à niveau.

4
répondu WW. 2008-11-03 14:49:11
la source

Nous de la version et de contrôle de la source de tout ce qui entoure nos bases de données:

  • DDL (create et modifie)
  • DML (données de référence, des codes, etc.)
  • Modèle de Données de changements (à l'aide d'ERwin ou ER/Studio)
  • modifications de configuration de base de données (permissions, objets de sécurité, modifications générales de configuration)

nous faisons tout cela avec des tâches automatisées en utilisant des scripts personnalisés. Nous avons le Gestionnaire du changement qui surveille ces changements et qui en avise lorsqu'ils sont terminés.

4
répondu Karen Lopez 2009-05-10 00:25:48
la source

je crois que chaque DB devrait être sous contrôle 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 les professionnels de base de données, j'ai créé un outil open-source qui scripte les bases de données MS SQL, et fournit et la façon facile de les déployer sur votre moteur de base de données locale. Essayez http://dbsourcetools.codeplex.com / . Amuser, - Nathan.

4
répondu Nathan Rozentals 2009-07-07 17:30:44
la source

si votre base de données est SQL Server, nous pourrions avoir juste la solution que vous recherchez. SQL Source Control 1.0 est maintenant disponible.

http://www.red-gate.com/products/SQL_Source_Control/index.htm

cela s'intègre dans SSMS et fournit la colle entre vos objets de base de données et vos VCS. Le "scripting out" se fait de manière transparente (il utilise le moteur de comparaison SQL sous le capot), ce qui devrait le rendre simple à utiliser que les développeurs ne seront pas découragés d'adopter le processus.

une solution alternative de studio visuel est ReadyRoll , qui est mis en œuvre comme un sous-type du projet de base de données SSDT. Il s'agit d'une approche axée sur les migrations, qui est plus adaptée aux exigences d'automatisation des équipes DevOps.

4
répondu David Atkinson 2016-05-17 16:42:44
la source

j'utilise SchemaBank pour le contrôle de version tous mes base de données des modifications de schéma:

  • a partir du premier jour, j'importe mon dump db schema dedans
  • j'ai commencé à changer ma conception de schéma en utilisant un navigateur web (parce qu'ils sont SaaS / cloud-based)
  • quand je veux mettre à jour mon serveur db, je génère le script change (SQL) à partir de celui-ci et je l'applique à la base de données. A Schemabank, ils m'ont mandaté pour faire mon travail en tant que version avant que je puisse générer un script de mise à jour. J'aime ce genre de pratique pour pouvoir toujours remonter quand j'en ai besoin.

notre règle d'équipe N'est jamais toucher le serveur db directement sans stocker le travail de conception d'abord. Mais il arrive que quelqu'un soit tenté d'enfreindre la règle, pour des raisons de convenance. Nous importerions le dump schema de nouveau dans schemabank et le laisserions faire la diff et frapper quelqu'un si une divergence est trouvée. Bien que nous puissions générer l'alter des scripts pour faire notre db, et la conception d'un schéma de synchronisation, il déteste ça.

soit dit en passant, ils nous ont aussi permis de créer des branches dans l'arbre de contrôle de version afin que je puisse en maintenir une pour la mise en scène et une pour la production. Et un pour le codage de bac à sable.

un outil de conception de schéma Web assez soigné avec le contrôle de version et la gestion du changement.

4
répondu Leigh Pyle 2017-09-14 06:48:55
la source

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, en ce qui concerne les données elles-mêmes, il suffit de compter sur des sauvegardes régulières. Cela garantit que tous les changements structurels sont saisis avec l'historique de révision approprié, mais ne surchargent pas la base de données chaque fois que des changements de données.

3
répondu Ben Hoffstein 2008-09-22 19:11:44
la source

dans notre entreprise, nous utilisons des scripts de modification de base de données. Quand un script est lancé, son nom est stocké dans la base de données et ne sera plus exécuté, à moins que cette ligne ne soit supprimée. Les Scripts sont nommés en fonction de la date, de l'heure et de la branche de code, de sorte que l'exécution contrôlée est possible.

beaucoup et beaucoup de tests sont effectués avant que les scripts soient lancés dans l'environnement live, donc les" oopsies " ne se produisent, en général, que sur les bases de données de développement.

3
répondu Wes P 2008-09-22 19:12:55
la source

nous sommes en train de transférer toutes les bases de données au contrôle source. Nous utilisons sqlcompare pour scripter la base de données (une fonctionnalité d'édition de profession, malheureusement) et mettre ce résultat dans SVN.

le succès de votre mise en œuvre dépendra beaucoup de la culture et des pratiques de votre organisation. Les gens 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 à l'origine de les dépendances interdatabase (certaines sont circulaires). Mettre les schémas de la base de données dans le contrôle source a été notoirement difficile en raison des dépendances interdatabase que nos systèmes ont.

bonne chance, plus tôt vous essaierez plus tôt vous aurez réglé vos problèmes.

3
répondu Min 2008-09-22 19:23:15
la source

j'ai utilisé l'outil dbdeploy de ThoughtWorks à http://dbdeploy.com / . Il encourage l'utilisation de scripts de migration. Chaque version, nous avons consolidé les scripts de changement dans un seul fichier pour faciliter la compréhension et pour permettre aux AD de "bénir" les changements.

3
répondu David Medinets 2008-09-22 19:29:35
la source

cela a toujours été un gros ennui pour moi aussi - il semble que c'est juste beaucoup trop facile de faire un changement rapide à votre base de données de développement, le sauver (oubliant de sauver un script de changement), et puis vous êtes coincé. Vous pouvez annuler ce que vous venez de faire et le refaire pour créer le script de changement, ou l'écrire à partir de zéro si vous voulez bien sûr aussi, bien que ce soit beaucoup de temps passé à écrire des scripts.

Un outil que j'ai utilisé dans le passé qui a aidé avec ce quelque soit SQL Delta. Il vous montrera les différences entre deux bases de données (SQL server/Oracle je crois) et générera tous les scripts de changement nécessaires pour migrer A->B. Une autre chose agréable qu'il fait est de montrer toutes les différences entre le contenu de la base de données entre la production (ou test) DB et votre développement DB. Puisque de plus en plus d'applications stockent la configuration et l'état qui est crucial à leur exécution dans les tables de base de données, il peut être une vraie douleur d'avoir des scripts de changement qui suppriment, ajoutent et modifient le bon rangée. SQL Delta montre les lignes dans la base de données tout comme ils regarderaient dans un outil Diff - changé, ajouté, supprimé.

un excellent outil. Voici le lien: http://www.sqldelta.com /

3
répondu Sam Schutte 2008-09-22 22:13:58
la source

RedGate est génial, nous générons de nouveaux snapshots lorsque des modifications sont apportées à la base de données (un petit fichier binaire) et garder ce fichier dans les projets comme une ressource. Chaque fois que nous avons besoin de mettre à jour la base de données, nous utilisons la boîte à outils de RedGate pour mettre à jour la base de données, ainsi que la possibilité de créer de nouvelles bases de données à partir de celles qui sont vides.

RedGate fait aussi des instantanés de données, bien que je n'ai pas personnellement travaillé avec eux, ils sont tout aussi robustes.

3
répondu Tom Anderson 2008-09-23 03:06:19
la source

POUR INFO, Dana en a parlé il y a quelques jours ... procédures Stockées/DB schéma de contrôle de source

3
répondu Robert Paulson 2017-05-23 13:31:37
la source

Autres questions sur version-control database