Partager via


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

La rubrique s'applique La rubrique s'applique La rubrique ne s'applique pas La rubrique ne s'applique pas

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

Procédure pas à pas : comparaison des schémas d'une base de données et d'un projet de base 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.

Dépannage des problèmes de comparaison de schémas

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

  • Égal à : l'objet possède la même définition et contient les mêmes objets dans les schémas source et cible.

  • Nouveau : l'objet existe dans le schéma source mais pas dans le schéma cible.

  • Manquant : l'objet existe dans le schéma cible mais pas dans le schéma source.

  • Définition différente : l'objet possède une définition dans le schéma source différente de celle du schéma cible.

  • Dépendances différentes : l'objet possède la même définition mais contient des objets différents dans les schémas source et cible.

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

  • Ignorer : l'objet ne sera pas mis à jour dans le schéma cible. Si l'objet possède des dépendances qui ont été modifiées, l'icône indiquera que vous devez développer cette ligne pour consulter l'objet référencé différent.

  • Ignorer la valeur référencée : l'objet existe dans une base de données référencée et ne doit pas être supprimé, ni créé.

  • Créer : l'objet est créé lorsque vous effectuez des mises à jour ou lorsque vous exécutez le script de mise à jour.

  • Mettre à jour : la définition d'objet est mise à jour pour correspondre au schéma source lorsque vous effectuez des mises à jour ou lorsque vous exécutez le script de mise à jour.

  • Drop – l'objet est supprimé du schéma cible lorsque vous effectuez des mises à jour ou lorsque vous exécutez le script de mise à jour.

RemarqueRemarque
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

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.