Versionnement de la base de données SQL Server

Translate

Je souhaite mettre mes bases de données sous contrôle de version. Quelqu'un a-t-il des conseils ou des articles recommandés pour me lancer?

Je veux toujours avoir au moinscertainsdonnées là-dedans (commealumbmentions: types d'utilisateurs et administrateurs). Je souhaite également souvent une grande collection de données de test générées pour les mesures de performances.

This question and all comments follow the "Attribution Required."

Toutes les réponses

ESV
Translate

Martin Fowler a écrit mon article préféré sur le sujet,http://martinfowler.com/articles/evodb.html. Je choisis de ne pas placer les vidages de schéma sous le contrôle de version commealumbet d'autres suggèrent parce que je veux un moyen simple de mettre à niveau ma base de données de production.

Pour une application Web où j'aurai une seule instance de base de données de production, j'utilise deux techniques:

Scripts de mise à niveau de la base de données

Scripts de mise à niveau de la base de données de séquences contenant le DDL nécessaire pour déplacer le schéma de la version N à N + 1. (Ceux-ci vont dans votre système de contrôle de version.) Une table _version_history_, quelque chose comme

create table VersionHistory (
    Version int primary key,
    UpgradeStart datetime not null,
    UpgradeEnd datetime
    );

obtient une nouvelle entrée à chaque exécution d'un script de mise à niveau correspondant à la nouvelle version.

Cela garantit qu'il est facile de voir quelle version du schéma de base de données existe et que les scripts de mise à niveau de base de données ne sont exécutés qu'une seule fois. Encore une fois, ce sontne pasvidages de la base de données. Au contraire, chaque script représente lechangementsnécessaire pour passer d'une version à l'autre. Il s'agit du script que vous appliquez à votre base de données de production pour la «mettre à niveau».

Synchronisation du développeur Sandbox

  1. Un script pour sauvegarder, nettoyer et réduire une base de données de production. Exécutez ceci après chaque mise à niveau vers la base de données de production.
  2. Un script pour restaurer (et peaufiner, si nécessaire) la sauvegarde sur le poste de travail d'un développeur. Chaque développeur exécute ce script après chaque mise à niveau vers la base de données de production.

Une mise en garde: mes tests automatisés s'exécutent sur une base de données correcte du schéma mais vide, donc ce conseil ne répondra pas parfaitement à vos besoins.

La source
Translate

Le produit SQL Compare de Red Gate vous permet non seulement de faire des comparaisons au niveau des objets et de générer des scripts de modification à partir de cela, mais il vous permet également d'exporter vos objets de base de données dans une hiérarchie de dossiers organisée par type d'objet, avec une création [objectname] .sql script par objet dans ces répertoires. La hiérarchie des types d'objets est comme ceci:

\Les fonctions
\Sécurité
\ Sécurité \ Rôles
\ Sécurité \ Schémas
\ Sécurité \ Utilisateurs
\Procédures stockées
\Les tables

Si vous videz vos scripts dans le même répertoire racine après avoir apporté des modifications, vous pouvez l'utiliser pour mettre à jour votre dépôt SVN et conserver un historique en cours d'exécution de chaque objet individuellement.

La source
Translate

C'est l'un des «problèmes difficiles» entourant le développement. Autant que je sache, il n’existe pas de solution parfaite.

Si vous avez uniquement besoin de stocker la structure de la base de données et non les données, vous pouvez exporter la base de données sous forme de requêtes SQL. (dans Enterprise Manager: Faites un clic droit sur la base de données -> Générer un script SQL. Je recommande de définir "créer un fichier par objet" dans l'onglet des options) Vous pouvez ensuite valider ces fichiers texte dans svn et utiliser les fonctions de diff et de journalisation de svn.

J'ai cela lié avec un script Batch qui prend quelques paramètres et configure la base de données. J'ai également ajouté des requêtes supplémentaires qui saisissent des données par défaut telles que les types d'utilisateurs et l'utilisateur administrateur. (Si vous voulez plus d'informations à ce sujet, postez quelque chose et je peux mettre le script quelque part accessible)

Si vous devez également conserver toutes les données, je vous recommande de conserver une sauvegarde de la base de données et d'utiliser Redgate (http://www.red-gate.com/) produits pour faire les comparaisons. Ils ne sont pas bon marché, mais ils valent chaque centime.

La source
Translate

Tout d'abord, vous devez choisir le système de contrôle de version qui vous convient:

  • Système de contrôle de version centralisé - un système standard dans lequel les utilisateurs extraient / archivent avant / après avoir travaillé sur des fichiers, et les fichiers sont conservés sur un serveur central unique

  • Système de contrôle de version distribué - un système où le référentiel est cloné, et chaque clone est en fait la sauvegarde complète du référentiel, donc si un serveur tombe en panne, tout référentiel cloné peut être utilisé pour le restaurer Après avoir choisi le bon système pour vos besoins , vous aurez besoin de configurer le référentiel qui est au cœur de chaque système de contrôle de version Tout cela est expliqué dans l'article suivant:http://solutioncenter.apexsql.com/sql-server-source-control-part-i-understanding-source-control-basics/

Après avoir mis en place un référentiel, et dans le cas d'un système de contrôle de version central un dossier de travail, vous pouvez lireCet article. Il montre comment configurer le contrôle de code source dans un environnement de développement en utilisant:

  • SQL Server Management Studio via le fournisseur MSSCCI,

  • Outils de données Visual Studio et SQL Server

  • Un outil tiers ApexSQL Source Control
La source
Translate

Ici, à Red Gate, nous proposons un outil,Contrôle de source SQL, qui utilise la technologie SQL Compare pour lier votre base de données à un référentiel TFS ou SVN. Cet outil s'intègre dans SSMS et vous permet de travailler comme vous le feriez normalement, sauf qu'il vous permet désormais de valider les objets.

Pour une approche basée sur les migrations (plus adaptée aux déploiements automatisés), nous proposonsAutomatisation des changements SQL(anciennement appelé ReadyRoll), qui crée et gère un ensemble de scripts incrémentiels en tant que projet Visual Studio.

Dans SQL Source Control, il est possible de spécifier des tables de données statiques. Ceux-ci sont stockés dans le contrôle de code source sous forme d'instructions INSERT.

Si vous parlez de données de test, nous vous recommandons de générer des données de test avec un outil ou via un script de post-déploiement que vous définissez, ou de simplement restaurer une sauvegarde de production dans l'environnement de développement.

La source
Translate

Vous pourriez vouloir regarder Liquibase (http://www.liquibase.org/). Même si vous n'utilisez pas l'outil lui-même, il gère assez bien les concepts de gestion des modifications de base de données ou de refactoring.

La source
Translate

+1 pour tous ceux qui ont recommandé les outils RedGate, avec une recommandation supplémentaire et une mise en garde.

SqlCompare dispose également d'une API correctement documentée: vous pouvez donc, par exemple, écrire une application console qui synchronise votre dossier de scripts contrôlés par la source avec une base de données de test d'intégration CI lors de l'archivage, de sorte que lorsque quelqu'un enregistre une modification du schéma à partir de son dossier de scripts il est automatiquement déployé avec le changement de code d'application correspondant. Cela aide à combler le fossé avec les développeurs qui oublient de propager les changements dans leur base de données locale jusqu'à une base de données de développement partagée (environ la moitié d'entre nous, je pense :)).

Une mise en garde est qu'avec une solution scriptée ou autre, les outils RedGate sont suffisamment fluides pour qu'il soit facile d'oublier les réalités SQL sous-jacentes à l'abstraction. Si vous renommez toutes les colonnes d'une table, SqlCompare n'a aucun moyen de mapper les anciennes colonnes aux nouvelles colonnes et supprimera toutes les données de la table. Cela générera des avertissements, mais j'ai vu des gens cliquer dessus. Il y a un point général ici qui vaut la peine d'être souligné, je pense, que vous ne pouvez automatiser que la gestion des versions et la mise à niveau de la base de données jusqu'à présent - les abstractions sont très fuites.

La source
Ray
Translate

Nous utilisonsDBGhostpour gérer notre base de données SQL. Ensuite, vous placez vos scripts pour créer une nouvelle base de données dans votre contrôle de version, et il construira une nouvelle base de données ou mettra à niveau toute base de données existante vers le schéma dans le contrôle de version. De cette façon, vous n'avez pas à vous soucier de la création de scripts de modification (bien que vous puissiez toujours le faire, si, par exemple, vous souhaitez modifier le type de données d'une colonne et devez convertir des données).

La source
Translate

Avec VS 2010, utilisez le projet Database.

  1. Script votre base de données
  2. Apportez des modifications aux scripts ou directement sur votre serveur db
  3. Synchroniser en utilisant Data> Schema Compare

Fait une solution parfaite de gestion des versions de bases de données et simplifie la synchronisation des bases de données.

La source
Translate

C'est une bonne approche pour enregistrer les scripts de base de données dans le contrôle de version avec des scripts de modification afin que vous puissiez mettre à niveau n'importe quelle base de données que vous avez. Vous pouvez également enregistrer des schémas pour différentes versions afin de pouvoir créer une base de données complète sans avoir à appliquer tous les scripts de modification. La gestion des scripts doit être automatisée afin que vous n'ayez pas à faire de travail manuel.

Je pense qu'il est important d'avoir une base de données distincte pour chaque développeur et de ne pas utiliser une base de données partagée. De cette façon, les développeurs peuvent créer des cas de test et des phases de développement indépendamment des autres développeurs.

L'outil d'automatisation doit avoir des moyens pour gérer les métadonnées de base de données, qui indiquent quelles bases de données sont dans quel état de développement et quelles tables contiennent des données contrôlables de version, etc.

La source
Translate

Vous pouvez également envisager une solution de migration. Celles-ci vous permettent de spécifier votre schéma de base de données dans le code C # et de faire monter et descendre la version de votre base de données à l'aide de MSBuild.

J'utilise actuellementDbUp, et cela fonctionne bien.

La source
Translate

Vous n'avez pas mentionné de détails sur votre environnement cible ou vos contraintes, donc cela peut ne pas être entièrement applicable ... mais si vous recherchez un moyen de suivre efficacement un schéma de base de données en évolution et n'êtes pas opposé à l'idée d'utiliser Ruby, les migrations d'ActiveRecord vous conviennent.

Les migrations définissent par programme les transformations de base de données à l'aide d'un DSL Ruby; chaque transformation peut être appliquée ou (généralement) annulée, ce qui vous permet de passer à une version différente de votre schéma de base de données à un moment donné. Le fichier définissant ces transformations peut être archivé dans le contrôle de version comme n'importe quel autre morceau de code source.

Parce que les migrations font partie deActiveRecord, ils trouvent généralement une utilisation dans les applications Rails à pile complète; cependant, vous pouvez utiliser ActiveRecord indépendamment de Rails avec un minimum d'effort. Voiricipour un traitement plus détaillé de l'utilisation des migrations d'AR en dehors de Rails.

La source
Yedda Lee
Translate

Chaque base de données doit être sous contrôle du code source. Ce qui manque, c'est un outil pour écrire automatiquement tous les objets de la base de données - et les «données de configuration» - dans un fichier, qui peut ensuite être ajouté à n'importe quel système de contrôle de source. Si vous utilisez SQL Server, ma solution est ici:http://dbsourcetools.codeplex.com/. S'amuser. - Nathan.

La source
Translate

C'est simple.

  1. Lorsque le projet de base est prêt, vous devez créer un script de base de données complet. Ce script est engagé dans SVN. C'est la première version.

  2. Après cela, tous les développeurs créent des scripts de modification (ALTER ..., nouvelles tables, sprocs, etc.).

  3. Lorsque vous avez besoin de la version actuelle, vous devez exécuter tous les nouveaux scripts de modification.

  4. Lorsque l'application est mise en production, vous revenez à 1 (mais ce sera une version successive bien sûr).

Nant vous aidera à exécuter ces scripts de modification. :)

Et rappelez-vous. Tout fonctionne bien quand il y a de la discipline. Chaque fois que la modification de la base de données est validée, les fonctions correspondantes dans le code sont également validées.

La source
Translate

Si vous avez une petite base de données et que vous souhaitez faire une version complète,ce script batchpourrait aider. Il détache, compresse et vérifie un fichier MDF de base de données MSSQL dans Subversion.

Si vous souhaitez principalement mettre à jour votre schéma et ne disposer que d'une petite quantité de données de référence, vous pouvez éventuellement utiliserMigrations SubSonicpour gérer cela. L'avantage est que vous pouvez facilement migrer vers le haut ou vers le bas vers n'importe quelle version spécifique.

La source
Translate

Pour rendre le vidage dans un système de contrôle de code source un peu plus rapide, vous pouvez voir quels objets ont changé depuis la dernière fois en utilisant les informations de version dans sysobjects.

Installer:Créez une table dans chaque base de données que vous souhaitez vérifier de manière incrémentielle pour contenir les informations de version de la dernière fois que vous l'avez vérifiée (vide lors de la première exécution). Effacez ce tableau si vous souhaitez réexaminer l'ensemble de votre structure de données.

IF ISNULL(OBJECT_ID('last_run_sysversions'), 0) <> 0 DROP TABLE last_run_sysversions
CREATE TABLE last_run_sysversions (
    name varchar(128), 
    id int, base_schema_ver int,
    schema_ver int,
    type char(2)
)

Mode de fonctionnement normal:Vous pouvez prendre les résultats de ce sql et générer des scripts sql uniquement pour ceux qui vous intéressent, et les placer dans un contrôle de code source de votre choix.

IF ISNULL(OBJECT_ID('tempdb.dbo.#tmp'), 0) <> 0 DROP TABLE #tmp
CREATE TABLE #tmp (
    name varchar(128), 
    id int, base_schema_ver int,
    schema_ver int,
    type char(2)
)

SET NOCOUNT ON

-- Insert the values from the end of the last run into #tmp
INSERT #tmp (name, id, base_schema_ver, schema_ver, type) 
SELECT name, id, base_schema_ver, schema_ver, type FROM last_run_sysversions

DELETE last_run_sysversions
INSERT last_run_sysversions (name, id, base_schema_ver, schema_ver, type)
SELECT name, id, base_schema_ver, schema_ver, type FROM sysobjects

-- This next bit lists all differences to scripts.
SET NOCOUNT OFF

--Renamed.
SELECT 'renamed' AS ChangeType, t.name, o.name AS extra_info, 1 AS Priority
FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id
WHERE o.name <> t.name /*COLLATE*/
AND o.type IN ('TR', 'P' ,'U' ,'V')
UNION 

--Changed (using alter)
SELECT 'changed' AS ChangeType, o.name /*COLLATE*/, 
       'altered' AS extra_info, 2 AS Priority
FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id 
WHERE (
   o.base_schema_ver <> t.base_schema_ver
OR o.schema_ver      <> t.schema_ver
)
AND  o.type IN ('TR', 'P' ,'U' ,'V')
AND  o.name NOT IN ( SELECT oi.name 
         FROM sysobjects oi INNER JOIN #tmp ti ON oi.id = ti.id
         WHERE oi.name <> ti.name /*COLLATE*/
         AND oi.type IN ('TR', 'P' ,'U' ,'V')) 
UNION

--Changed (actually dropped and recreated [but not renamed])
SELECT 'changed' AS ChangeType, t.name, 'dropped' AS extra_info, 2 AS Priority
FROM #tmp t
WHERE    t.name IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti
         WHERE NOT EXISTS (SELECT * FROM sysobjects oi
                           WHERE oi.id = ti.id))
AND  t.name IN ( SELECT oi.name /*COLLATE*/ FROM sysobjects oi
         WHERE NOT EXISTS (SELECT * FROM #tmp ti
                           WHERE oi.id = ti.id)
         AND   oi.type  IN ('TR', 'P' ,'U' ,'V'))
UNION

--Deleted
SELECT 'deleted' AS ChangeType, t.name, '' AS extra_info, 0 AS Priority
FROM #tmp t
WHERE NOT EXISTS (SELECT * FROM sysobjects o
                  WHERE o.id = t.id)
AND t.name NOT IN (  SELECT oi.name /*COLLATE*/ FROM sysobjects oi
         WHERE NOT EXISTS (SELECT * FROM #tmp ti
                           WHERE oi.id = ti.id)
         AND   oi.type  IN ('TR', 'P' ,'U' ,'V'))
UNION

--Added
SELECT 'added' AS ChangeType, o.name /*COLLATE*/, '' AS extra_info, 4 AS Priority
FROM sysobjects o
WHERE NOT EXISTS (SELECT * FROM #tmp t
                  WHERE o.id = t.id)
AND      o.type  IN ('TR', 'P' ,'U' ,'V')
AND  o.name NOT IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti
         WHERE NOT EXISTS (SELECT * FROM sysobjects oi
                           WHERE oi.id = ti.id))
ORDER BY Priority ASC

Remarque:Si vous utilisez un classement non standard dans l'une de vos bases de données, vous devrez remplacer/* COLLATE */avec votre classement de base de données. c'est à direCOLLATE Latin1_General_CI_AI

La source
Translate

Étant donné que notre application doit fonctionner sur plusieurs SGBDR, nous stockons notre définition de schéma dans le contrôle de version à l'aide de la base de données indépendanteCoupleformat (XML). Nous contrôlons également la version des données de référence de notre base de données au format XML comme suit (où "Relation" est l'une des tables de référence):

  <Relationship RelationshipID="1" InternalName="Manager"/>
  <Relationship RelationshipID="2" InternalName="Delegate"/>
  etc.

Nous utilisons ensuite des outils locaux pour générer la mise à niveau du schéma et les scripts de mise à niveau des données de référence qui sont nécessaires pour passer de la version X de la base de données à la version X + 1.

La source
Translate

Nous ne stockons pas le schéma de base de données, nous stockons les modifications dans la base de données. Ce que nous faisons, c'est stocker les modifications de schéma afin de créer un script de modification pour n'importe quelle version de la base de données et de l'appliquer aux bases de données de nos clients. J'ai écrit une application utilitaire de base de données qui est distribuée avec notre application principale qui peut lire ce script et savoir quelles mises à jour doivent être appliquées. Il dispose également de suffisamment d'intelligence pour actualiser les vues et les procédures stockées selon les besoins.

La source
Translate

Nous avons eu besoin de mettre à jour notre base de données SQL après avoir migré vers une plate-forme x64 et notre ancienne version a rompu avec la migration. Nous avons écrit une application C # qui a utilisé SQLDMO pour mapper tous les objets SQL dans un dossier:

                Root
                    ServerName
                       DatabaseName
                          Schema Objects
                             Database Triggers*
                                .ddltrigger.sql
                             Functions
                                ..function.sql
                             Security
                                Roles
                                   Application Roles
                                      .approle.sql
                                   Database Roles
                                      .role.sql
                                Schemas*
                                   .schema.sql
                                Users
                                   .user.sql
                             Storage
                                Full Text Catalogs*
                                   .fulltext.sql
                             Stored Procedures
                                ..proc.sql
                             Synonyms*
                                .synonym.sql
                             Tables
                                ..table.sql
                                Constraints
                                   ...chkconst.sql
                                   ...defconst.sql
                                Indexes
                                   ...index.sql
                                Keys
                                   ...fkey.sql
                                   ...pkey.sql
                                   ...ukey.sql
                                Triggers
                                   ...trigger.sql
                             Types
                                User-defined Data Types
                                   ..uddt.sql
                                XML Schema Collections*
                                   ..xmlschema.sql
                             Views
                                ..view.sql
                                Indexes
                                   ...index.sql
                                Triggers
                                   ...trigger.sql

L'application comparerait ensuite la nouvelle version écrite à la version stockée dans SVN et s'il y avait des différences, elle mettrait à jour SVN. Nous avons déterminé que l'exécution du processus une fois par nuit était suffisante car nous n'apportons pas autant de modifications à SQL. Il nous permet de suivre les modifications de tous les objets qui nous intéressent et de reconstruire notre schéma complet en cas de problème grave.

La source
Translate

J'ai écrit cette application il y a quelque temps,http://sqlschemasourcectrl.codeplex.com/qui analysera vos bases de données MSFT SQL aussi souvent que vous le souhaitez et videra automatiquement vos objets (tables, vues, processus, fonctions, paramètres sql) dans SVN. Fonctionne comme un charme. Je l'utilise avec Unfuddle (qui me permet de recevoir des alertes sur les checkins)

La source
Translate

La solution typique consiste à vider la base de données si nécessaire et à sauvegarder ces fichiers.

En fonction de votre plate-forme de développement, des plugins open source peuvent être disponibles. Rouler votre propre code pour le faire est généralement assez trivial.

Remarque: vous souhaiterez peut-être sauvegarder le vidage de la base de données au lieu de le placer dans le contrôle de version. Les fichiers peuvent devenir extrêmement rapides dans le contrôle de version et ralentir tout votre système de contrôle de source (je me souviens d'une histoire d'horreur CVS pour le moment).

La source
Translate

Nous venons de commencer à utiliser Team Foundation Server. Si votre base de données est de taille moyenne, alors Visual Studio propose de jolies intégrations de projet avec des outils de comparaison, de comparaison de données, de refactoring de base de données, un cadre de test de base de données et même des outils de génération de données intégrés.

Mais ce modèle ne convient pas très bien aux bases de données très volumineuses ou tierces (qui chiffrent les objets). Donc, ce que nous avons fait, c'est de stocker uniquement nos objets personnalisés. Le serveur de fondation Visual Studio / Team fonctionne très bien pour cela.

Arc principal de la base de données TFS. Blog

Site MS TFS

La source
Translate

Je suis d'accord avec la réponse ESV et pour cette raison exacte, j'ai commencé un petit projet il y a quelque temps pour aider à maintenir les mises à jour de la base de données dans un fichier très simple qui pourrait ensuite être conservé un long code source. Il permet des mises à jour faciles pour les développeurs ainsi que pour l'UAT et la production. L'outil fonctionne sur mais Sql Server et MySql.

Quelques caractéristiques du projet:

  • Permet les changements de schéma
  • Permet la population d'arbres de valeur
  • Permet des insertions de données de test séparées pour par exemple. UAT
  • Permet l'option de restauration (non automatisée)
  • Maintient le support pour le serveur SQL et Mysql
  • A la possibilité d'importer votre base de données existante dans le contrôle de version avec une simple commande (serveur sql uniquement ... travaillant toujours sur mysql)

Le code est hébergé sur google code. Veuillez consulter le code Google pour plus d'informations

http://code.google.com/p/databaseversioncontrol/

La source
Translate

Il y a quelque temps, j'ai trouvé un module bas VB qui utilisait des objets DMO et VSS pour obtenir une base de données entière scriptée et dans VSS. Je l'ai transformé en script VB et l'ai postéici. Vous pouvez facilement prendre les appels VSS et utiliser les éléments DMO pour générer tous les scripts, puis appeler SVN à partir du même fichier de commandes qui appelle le VBScript pour les archiver?

Dave J

La source
Translate

J'utilise également une version dans la base de données stockée via la famille de procédures de propriétés étendues de la base de données. Mon application a des scripts pour chaque étape de version (c'est-à-dire passer de 1.1 à 1.2). Une fois déployé, il examine la version actuelle, puis exécute les scripts un par un jusqu'à ce qu'il atteigne la dernière version de l'application. Il n'y a pas de script qui a la version «finale» directe, même le déploiement sur une base de données propre effectue le déploiement via une série d'étapes de mise à niveau.

Maintenant, ce que j'aime ajouter, c'est que j'ai vu il y a deux jours une présentation sur le campus MS sur la nouvelle et prochaine édition de VS DB. La présentation était spécifiquement centrée sur ce sujet et j'ai été soufflé hors de l'eau. Vous devez absolument le vérifier, les nouvelles fonctionnalités sont axées sur le maintien de la définition de schéma dans les scripts T-SQL (CREATE), un moteur delta d'exécution pour comparer le schéma de déploiement avec le schéma défini et faire les ALTER delta et l'intégration avec l'intégration du code source, jusqu'à et l'intégration continue de MSBUILD pour les abandons automatisés de build La suppression contiendra un nouveau type de fichier, les fichiers .dbschema, qui peuvent être transférés vers le site de déploiement et un outil de ligne de commande peut effectuer les «deltas» réels et exécuter le déploiement. J'ai une entrée de blog sur ce sujet avec des liens vers les téléchargements VSDE, vous devriez les consulter:http://rusanu.com/2009/05/15/version-control-and-your-database/

La source
Translate

C'est une question très ancienne, mais beaucoup essaient de la résoudre même maintenant. Tout ce qu'ils ont à faire est de rechercher des projets de base de données Visual Studio. Sans cela, tout développement de base de données semble très faible. De l'organisation du code au déploiement en passant par la gestion des versions, cela simplifie tout.

La source
Translate

D'après mon expérience, la solution est double:

  1. Vous devez gérer les modifications de la base de données de développement effectuées par plusieurs développeurs au cours du développement.

  2. Vous devez gérer les mises à niveau de la base de données sur les sites des clients.

Afin de gérer le # 1, vous aurez besoin d'un outil de comparaison / fusion de base de données solide. Le meilleur outil devrait être capable d'effectuer autant que possible la fusion automatique tout en vous permettant de résoudre manuellement les conflits non gérés.

L'outil parfait doit gérer les opérations de fusion en utilisant un algorithme de fusion à 3 voies qui tient compte des modifications apportées à la base de données THEIRS et à la base de données MINE, par rapport à la base de données BASE.

J'ai écrit un outil commercial qui fournit une prise en charge de la fusion manuelle pour les bases de données SQLite et j'ajoute actuellement la prise en charge de l'algorithme de fusion à 3 voies pour SQLite. Vérifiez-le àhttp://www.sqlitecompare.com

Afin de gérer le # 2, vous aurez besoin d'un cadre de mise à niveau en place.

L'idée de base est de développer un cadre de mise à niveau automatique qui sait comment mettre à niveau un schéma SQL existant vers le schéma SQL plus récent et peut créer un chemin de mise à niveau pour chaque installation de base de données existante.

Consultez mon article sur le sujet danshttp://www.codeproject.com/KB/database/sqlite_upgrade.aspxpour avoir une idée générale de ce dont je parle.

Bonne chance

Liron Levi

La source
Translate

Découvrez DBGhosthttp://www.innovartis.co.uk/. Je l'utilise de manière automatisée depuis 2 ans maintenant et cela fonctionne très bien. Cela permet à nos builds DB de se produire un peu comme une build Java ou C, sauf pour la base de données. Tu sais ce que je veux dire.

La source
Translate

Je suggérerais d'utiliser des outils de comparaison pour improviser un système de contrôle de version pour votre base de données. Une bonne alternative sontComparaison des schémas xSQLetComparaison des données xSQL.

Maintenant, si votre objectif est d'avoir uniquement le schéma de la base de données sous contrôle de version, vous pouvez simplement utiliser la comparaison de schémas xSQL pour générer des instantanés xSQL du schéma et ajouter ces fichiers dans votre contrôle de version. Ensuite, pour revenir ou mettre à jour vers une version spécifique, comparez simplement la version actuelle de la base de données avec l'instantané de la version de destination.

Hélas, si vous souhaitez que les données soient également sous contrôle de version, vous pouvez utiliser la comparaison de données xSQL pour générer des scripts de modification pour votre base de données et ajouter les fichiers .sql dans votre contrôle de version. Vous pouvez ensuite exécuter ces scripts pour revenir / mettre à jour la version de votre choix. Gardez à l'esprit que pour la fonctionnalité de «retour», vous devez générer des scripts de modification qui, une fois exécutés, rendront la version 3 identique à la version 2 et pour la fonctionnalité de «mise à jour», vous devez générer des scripts de modification qui font le contraire.

Enfin, avec quelques compétences de base en programmation par lots, vous pouvez automatiser l'ensemble du processus en utilisant les versions en ligne de commande de xSQL Schema Compare et xSQL Data Compare

Avertissement: je suis affilié à xSQL.

La source