Comparer et synchroniser des schémas de base de données
Cette rubrique s'applique à :
Visual Studio Ultimate |
Visual Studio Premium |
Visual Studio Professional |
Visual Studio Express |
---|---|---|---|
Vous pouvez utiliser Visual Studio Premium ou Visual Studio Ultimate pour comparer un schéma cible avec un schéma source. Pour chaque différence, vous pouvez spécifier s'il faut mettre à jour la cible afin qu'elle corresponde à la source. Ces mises à jour peuvent être effectuées directement sur la cible ou vous pouvez exporter le script de mise à jour vers l'éditeur Transact-SQL ou vers un fichier. Vous pouvez également enregistrer vos comparaisons, dans le cadre de votre projet de base de données ou en tant que fichier autonome. L'enregistrement de vos comparaisons vous permet de les répéter plus facilement ou de resynchroniser les mêmes source et cible.
Types de comparaisons de schémas
Vous pouvez comparer les entités suivantes qui contiennent des définitions de schémas de bases de données :
Base de données SQL Server - base de données qui s'exécute sur une instance SQL Server 2008 ou SQL Server 2005
Projet de base de données : projet qui contient des définitions de bases de données SQL Server 2008 ou SQL Server 2005 et qui produit un fichier .dbschema lors de la génération
Projet serveur : projet qui contient des définitions d'objets serveur et d'objets présents dans la base de données « master » sur un serveur SQL Server 2008 ou SQL Server 2005 et qui produit un fichier .dbschema lors de la génération
Projet du composant d'application de couche Données (DAC) : projet qui produit un fichier .dacpac lors de la génération
Fichier .dbschema : résultat obtenu lors de la génération d'une base de données ou d'un projet serveur
Fichier .dacpac : résultat obtenu lors de la génération d'un projet DAC (composant d'application de couche Données)
Le tableau suivant contient les types des schémas que vous pouvez comparer et indique si la cible prend en charge les mises à jour :
Source (ci-dessous) Cible (ci-contre) |
Base de données SQL Server |
Projet de base de données |
Fichier .dbschema |
Projet serveur |
Projet DAC |
Fichier .dacpac |
---|---|---|---|---|---|---|
Base de données SQL Server |
Comparaison + mise à jour |
Comparaison + mise à jour |
Comparaison |
Comparaison + mise à jour |
Comparaison |
Comparaison |
Projet de base de données |
Comparaison + mise à jour |
Comparaison + mise à jour |
Comparaison |
Aucun |
Aucun |
Aucun |
Fichier .dbschema |
Comparaison + mise à jour |
Comparaison + mise à jour |
Comparaison |
Comparaison + mise à jour |
Aucun |
Aucun |
Projet serveur |
Comparaison + mise à jour |
Aucun |
Comparaison |
Comparaison + mise à jour |
Aucun |
Aucun |
Projet DAC |
Comparaison |
Aucun |
Aucun |
Aucun |
Comparaison + mise à jour |
Comparaison |
Fichier .dacpac |
Comparaison |
Aucun |
Aucun |
Aucun |
Comparaison + mise à jour |
Comparaison |
Pour lire cette table, recherchez la ligne de votre schéma source dans la colonne la plus à gauche. Recherchez ensuite la colonne de votre schéma cible dans la ligne du haut. L'intersection de cette colonne et de la ligne fournit des informations qui précise si vous pouvez comparer uniquement la source et la cible, ou si vous pouvez comparez et éventuellement mettre à jour le schéma cible.
Vous ne pouvez pas comparer un schéma de serveur à un schéma de base de données, et inversement. Cela inclut des schémas sous la forme de fichier .dbschema. Par exemple, vous pouvez comparer un projet serveur avec un fichier .dbschema créé à partir d'un projet serveur.
Vous pouvez comparer deux projets de base de données uniquement s'ils figurent au sein de la même solution dans Visual Studio.
Avertissement
Même si vous pouvez comparer une base de données source avec un projet de base de données cible (.dbproj), vous devriez plutôt modifier le projet de base de données et déployer ces modifications dans la base de données. Lorsque vous modifiez le projet (.dbproj) avant de le déployer, vous réduisez le risque que vos modifications soient en conflit avec celles effectuées par un autre membre de l'équipe car le projet est soumis à un contrôle de version.
Prévention de la perte de données lors de la mise à jour de schémas de bases de données
Lorsque vous utilisez la comparaison de schémas pour mettre à jour des schémas de bases de données, des pertes de données sont possibles. Pour éviter toute perte de données, vous devez accorder une attention toute particulière aux noms des objets présents sur la source et sur la cible, notamment juste avant de mettre à jour le schéma dans la cible.
Par exemple, vous pouvez renommer une table Order_Details en OrderDetails dans la base de données source sans la renommer dans la base de données cible, puis comparer les deux bases de données. Avant d'être synchronisées, les données des deux tables sont identiques. Toutefois, lorsque vous mettez à jour la cible, la table Order_Details est supprimée et une table OrderDetails est créée. Il est possible que vous perdiez toutes les données de la table Order_Details.
Pour éviter toute perte de données, vous pouvez ouvrir le menu Outils, cliquer sur Options et activer la case à cocher Bloquer les mises à jour de schéma si une perte de données peut se produire. De plus, vous devez toujours sauvegarder votre base de données avant d'y effectuer des mises à jour. Vous pouvez également spécifier des options pour une comparaison lorsque vous comparez des schémas. Pour plus d'informations, consultez Comment : définir des options pour comparer des schémas de base de données.
Important
Si vous utilisez la refactorisation pour renommer des objets dans votre projet de base de données, le journal de refactorisation permet également d'empêcher toute perte de données lorsque vous générez et déployez la base de données. Ce journal conserve l'objectif de vos modifications. Par exemple, les tables peuvent être directement renommées.
Différences entre la comparaison de schémas et le déploiement incrémentiel
Lorsque vous déployez des mises à jour dans une base de données existante, le processus est très similaire à celui impliqué lorsque vous utilisez la comparaison de schémas pour synchroniser deux schémas de bases de données. Toutefois, la comparaison de schémas présente une différence importante : par défaut, elle ignore les propriétés étendues.
Vous pouvez modifier les options de la comparaison de schémas, pour toutes les sessions de comparaison de schémas ou pour la session active, si vous ne souhaitez pas ignorer les propriétés et autorisations étendues. Pour plus d'informations, consultez Comment : définir des options pour comparer des schémas de base de données.
Tâches courantes
Dans le tableau suivant, vous pouvez trouver les descriptions des tâches courantes qui prennent en charge ce scénario, ainsi que des liens pointant vers des informations supplémentaires sur la façon dont vous pouvez mener à bien ces tâches.
Tâches courantes |
Contenu de support |
---|---|
Apprendre en faisant : vous pouvez suivre les premières procédures pas à pas pour vous familiariser avec la comparaison de deux bases de données ou d'une base de données et d'un projet (.dbproj). |
Procédure pas à pas : comparaison des schémas de deux bases de données |
Définir les options de contrôle de la comparaison de schémas : vous pouvez configurer les détails qui contrôlent la comparaison de schémas. Vous pouvez ignorer des types spécifiques de différences, comme les espaces blancs, les groupes de fichiers et les commentaires. Vous pouvez également ignorer des catégories d'objets, comme les utilisateurs ou les connexions. Vous pouvez définir des options qui contrôlent le script de mise à jour généré. |
Comment : définir des options pour comparer des schémas de base de données |
Comparer des objets serveur ou de bases de données et éventuellement mettre à jour la cible pour qu'elle corresponde à la source : spécifiez un schéma source et un schéma cible à comparer ; les résultats s'affichent dans la fenêtre Comparaison de schémas. Vous pouvez consulter les détails des différences et le script de mise à jour qui permettra de synchroniser la base de données. Vous pouvez enregistrer chaque comparaison de schémas dans votre projet ou dans un fichier .scmp autonome. Vous spécifiez des actions pour chaque différence entre les schémas source et cible. Vous pouvez ensuite effectuer des mises à jour sur la cible. Vous pouvez également exporter le script de mise à jour vers l'éditeur Transact-SQL ou vers un fichier, afin que vous puissiez l'examiner avant d'appliquer les modifications à la cible. |
Comment : comparer des schémas de base de données Présentation des résultats de la comparaison de schémas |
Résoudre les problèmes : vous pouvez obtenir des informations supplémentaires sur la résolution des problèmes connus que vous pouvez rencontrer lorsque vous comparez et synchronisez des schémas de bases de données. |
Présentation des résultats de la comparaison de schémas
La fenêtre Comparaison de schémas affiche quatre colonnes pour chaque objet comparé. Le tableau suivant décrit le contenu de chaque colonne.
Colonne |
Valeurs |
---|---|
État |
Par exemple, vous pouvez modifier une définition de table dans le schéma source mais pas le schéma cible, puis les comparer. Ainsi, les tables seront signalées comme Définition différente et le schéma qui les contient sera signalé comme Dépendances différentes. |
NomSource (Source {Projet, base de données ou fichier projet (.dbschema)}) |
Nom du projet source, de la base de données ou du fichier projet que vous comparez. |
Action de mise à jour |
Remarque
L'action par défaut est déterminée par l'état.Pour les objets Égal à, l'action par défaut est Ignorer et elle n'est pas modifiable.Pour les objets Nouveau, l'action par défaut est Créer, mais vous pouvez spécifier Ignorer.Pour les objets Manquant, l'action par défaut est Drop, mais vous pouvez spécifier Ignorer.Pour Définition différente, l'action par défaut est Mettre à jour, mais vous pouvez spécifier Ignorer.Pour Objets différents, l'action par défaut est Ignorer ; vous ne pouvez pas la modifier (dans ce cas, l'objet est Égal à, mais il contient des objets nouveaux, manquants ou encore modifiés).
|
NomCible (Cible {Projet, base de données ou fichier projet (.dbschema)}) |
Nom du projet, de la base de données ou du fichier projet cible que vous comparez. |
Scénarios connexes
Comparer et synchroniser les données d'une ou de plusieurs tables avec les données d'une base de données de référence
Vous pouvez utiliser la comparaison de données pour synchroniser des données entre des tables de bases de données source et cible.Renommer toutes les références à un objet de base de données
Vous pouvez utiliser la refactorisation pour renommer toutes les références à un objet de base de données. Lors de la génération et du déploiement, le journal de refactorisation permet de conserver l'objectif de vos modifications et de réduire le risque de perte de données.Générer et déployer des bases de données dans un environnement de développement isolé
Vous pouvez mettre à jour la base de données cible à l'aide de la comparaison de schémas, mais les équipes doivent envisager de modifier le projet de base de données, puis de générer et déployer ces modifications dans leur base de données cible. Si vous appliquez cette pratique, vous conservez l'objectif de toutes les opérations de refactorisation que vous exécutez sur le projet de base de données. Vous réduisez également le risque que vos modifications soient remplacées par un autre membre de l'équipe qui utilise aussi la comparaison de schémas pour mettre à jour votre base de données.
Historique des modifications
Date |
Historique |
Motif |
---|---|---|
Juin 2010 |
Informations ajoutées sur la lecture de la première table dans la rubrique, en réponse à des commentaires client. |
Commentaires client. |
Août 2010 |
Clarification concernant le fait que les projets peuvent être comparés uniquement s'ils figurent dans la même solution. |
Commentaires client. |