Partager via


Comment : comparer 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

Visual Studio Premium ou Visual Studio Ultimate vous permet de comparer deux schémas de base de données. Ces schémas peuvent être représentés par une base de données, un projet d'application de couche Données, un projet de base de données ou encore la sortie de génération d'un projet de base de données (fichier .dbschema). Les entités que vous comparez sont appelées la source et la cible. Une fois la comparaison des schémas terminée, ses résultats s'affichent dans la fenêtre Comparaison de schémas. De plus, Visual Studio génère un script de langage de définition de données (DDL) que vous pouvez utiliser pour synchroniser les différents schémas.

Si vous envisagez de régulièrement comparer un projet de base de données à une base de données cible, vous pouvez ajouter la comparaison de schémas à votre projet de base de données. Vous pouvez ensuite comparer à nouveau les schémas en rouvrant cette comparaison. L'enregistrement d'une comparaison de schémas entraîne celle des informations de connexion, des options spécifiques à la session et des valeurs pour les variables SQLCMD. Les résultats ne sont pas enregistrés ; ils seront régénérés lors de l'ouverture du fichier .scmp de la comparaison de schémas enregistrée.

Une fois comparaison terminée, vous pouvez exécuter d'autres étapes :

  • Vous pouvez consulter les différences structurelles entre les deux bases de données. Pour plus d'informations, consultez Affichage des différences de schémas.

  • Vous pouvez cliquer sur Actualiser le script de mise à jour pour consulter le script complet qui permettra de synchroniser les schémas, si vous décidez de procéder ainsi.

  • Vous pouvez mettre à jour une partie ou l'intégralité de la cible pour qu'elle corresponde à la source. Pour plus d'informations, consultez Synchronisation d'objets serveur ou de base de données.

  • Vous pouvez comparer les données qui résident dans la cible et la source. Pour plus d'informations, consultez Comment : comparer et synchroniser les données de deux bases de données.

Pour plus d'informations sur les scénarios de comparaison de schémas, consultez Comparer et synchroniser des schémas de base de données.

Vous pouvez également comparer des fichiers .dbschema au niveau d'une invite de commandes à l'aide de VSDBCMD.EXE. Par exemple, vous pouvez procéder ainsi pour générer un script de mise à jour pour mettre à jour une base de données cible lorsque vous n'avez pas d'accès direct au serveur cible.

Dans cette rubrique

Pour comparer deux schémas à l'aide de la comparaison de schémas

  1. Si vous souhaitez comparer deux schémas, mais sans enregistrer vos paramètres dans le cadre de votre projet de base de données, procédez comme suit :

    1. Ouvrez le menu Données, pointez sur Comparaison de schémas et cliquez sur Nouvelle comparaison de schémas.

    2. Passez à l'étape 3.

  2. Si vous souhaitez comparer deux schémas, puis enregistrer vos paramètres dans le cadre de votre projet de base de données, procédez comme suit :

    1. Dans l'Explorateur de solutions, cliquez avec le bouton droit de la souris sur le dossier Comparaisons de schémas, pointez sur Ajouter, puis cliquez sur Comparaison de schémas.

      La boîte de dialogue Ajouter un nouvel élément s'affiche alors.

    2. Dans Nom, tapez le nom que vous souhaitez donner à la comparaison de schémas, puis cliquez sur Ajouter.

  3. Spécifiez la source et la cible que vous souhaitez comparer en cliquant sur Projet, Base de données ou encore Fichier de schéma de base de données pour chaque schéma.

    Notes

    Vous pouvez spécifier un fichier de schéma de base de données pour le schéma cible, mais ne pouvez pas le mettre à jour. Pour obtenir une liste complète des scénarios de comparaison pris en charge, consultez Comparer et synchroniser des schémas de base de données.

  4. Si vous avez cliqué sur Base de données pour la source ou la cible, connectez-vous à la source de données en cliquant dessus dans la liste.

    Si votre base de données n'est pas répertoriée, cliquez sur Nouvelle connexion. Dans la boîte de dialogue Propriétés de connexion, identifiez le serveur sur lequel réside la source ou la cible, ainsi que le type d'authentification à utiliser lorsque vous vous y connectez. Cliquez éventuellement sur une base de données située sur ce serveur. Lorsque vous avez terminé, cliquez sur OK.

    Notes

    Une fois une connexion établie, elle apparaît dans l'Explorateur de serveurs sous Connexions de données.

  5. Si vous avez cliqué sur Fichier de schéma de base de données pour la source ou la cible, tapez le chemin d'accès et le nom de fichier ou encore cliquez sur Parcourir pour spécifier un fichier.

  6. (facultatif) Cliquez sur Options pour spécifier les objets à comparer, les types de différences à ignorer et le contenu du script de mise à jour généré.

    Important

    Par défaut, les sessions de comparaison de schémas utilisent les options que vous configurez lorsque vous ouvrez le menu Outils et cliquez sur Options. Si vous ne souhaitez pas ignorer les propriétés étendues, cliquez sur Options pour modifier le paramètre correspondant. Pour plus d'informations sur la définition d'options concernant la comparaison de schémas, consultez Comment : définir des options pour comparer des schémas de base de données.

  7. (facultatif) Cliquez sur Variables SQLCMD pour spécifier un fichier .sqlcmdvars qui contient une liste des variables et leurs valeurs.

    Notes

    Vous pouvez spécifier des variables SQLCMD uniquement lors de la comparaison de deux projets (projets de base de données, projets serveur ou encore projets d'application de couche Données).

    Les valeurs seront remplacées dans le projet de base de données correspondant lors de la comparaison des schémas.

  8. Cliquez sur OK.

    La comparaison de schémas commence.

    Notes

    Pour arrêter une comparaison en cours, vous pouvez cliquer sur Arrêter dans la barre d'outils.

Pour comparer des schémas à l'aide du modèle Automation Visual Studio

  1. Dans le menu Affichage, pointez sur Autres fenêtres et cliquez sur Fenêtre Commande.

  2. Dans Fenêtre Commande, tapez la commande suivante :

    Data.NewSchemaComparison sourceIdentifier targetIdentifier
    

    Remplacez sourceIdentifier par l'un des éléments suivants :

    • /ProviderType ConnectionBased /ConnectionString "maChaîneConnexion"

    • /ProviderType ConnectionBased /ConnectionName monNomConnexion

    • /ProviderType ProjectBased /ProjectName monNomFichier.dbproj

    • /ProviderType FileBased /ProjectName monNomFichier.dbschema

    • /ProviderType FileBased /ProjectName monNomFichier.dacpac

    Remplacez targetIdentifier par l'un des éléments suivants :

    • /ProviderType ConnectionBased /ConnectionString "maChaîneConnexion"

    • /ProviderType ConnectionBased /ConnectionName monNomConnexion

    • /ProviderType ProjectBased /ProjectName monNomFichier.dbproj

    • /ProviderType FileBased /ProjectName monNomFichier.dbschema

    • /ProviderType FileBased /ProjectName monNomFichier.dacpac

    Si vous ne spécifiez pas de source ni de cible, la boîte de dialogue Nouvelle comparaison de schémas s'affiche. Pour plus d'informations sur les paramètres de la commande Data.NewSchemaComparison, consultez Référence des commandes Automation pour les fonctionnalités de base de données de Visual Studio.

    Les objets et les paramètres de la source et de la cible spécifiées sont comparés. Les résultats s'affichent dans une session de comparaison de schémas que vous pouvez éventuellement enregistrer. Pour plus d'informations sur l'affichage des résultats ou sur la synchronisation des schémas, consultez Affichage des différences de schémas et Synchronisation d'objets serveur ou de base de données.

Pour enregistrer une comparaison de schémas pour la première fois

  1. Dans le menu Fichier, cliquez sur Enregistrer NomComparaisonSchémas.scmp.

    La boîte de dialogue Enregistrer le fichier sous s'ouvre.

  2. Spécifiez le chemin d'accès et le nom de fichier de la comparaison de schémas.

    Si la comparaison fait partie de votre projet de base de données, celle-ci sera enregistrée dans le dossier Comparaisons de schémas de ce projet.

  3. Cliquez sur Enregistrer.

    Votre comparaison de schémas est alors enregistrée à l'emplacement que vous avez spécifié.

Affichage des différences de schémas

Vous pouvez déterminer dans quelle mesure un schéma source diffère d'un schéma cible en les comparant et en affichant les résultats sous la forme d'une arborescence dans la fenêtre Comparaison de schémas. Par exemple, vous pouvez afficher uniquement les objets qui existent dans la source, mais pas dans la cible. Vous pouvez également afficher des détails sur la différence des objets particuliers ; vous pouvez actualiser les résultats pour qu'ils reflètent les modifications récentes.

Vous pouvez également afficher les résultats sous la forme de commandes Transact-SQL, dans un script qui synchronise la cible et la source. Vous pouvez afficher ce script dans la fenêtre Script de mise à jour du schéma ou dans l'éditeur Transact-SQL. Vous pouvez également exporter le script vers un fichier. Si vous décidez de mettre à jour la cible pour qu'elle corresponde à la source, vous pouvez exécuter le script immédiatement pour synchroniser les schémas ; vous pouvez également le modifier avant de l'exécuter. Pour plus d'informations, consultez Synchronisation d'objets serveur ou de base de données.

Pour filtrer les résultats par type

  1. Dans la barre d'outils Comparaison de schémas, cliquez sur Filtrer.

  2. Cliquez sur un ou plusieurs filtres pour spécifier les jeux de résultats que vous souhaitez afficher.

    Notes

    Les paramètres de filtres sont enregistrés avec le fichier .scmp et sont persistants lorsque vous modifiez les schémas source et cible.

Pour afficher des modifications dans une définition d'objet

  • Cliquez sur une ligne de la grille dont l'état est Nouveau, Manquant ou De forme différente.

Pour actualiser des résultats de comparaison

  • Dans la barre d'outils Comparaison de schémas, cliquez sur Actualiser.

    La source et cible sont de nouveau comparées et les résultats de la comparaison sont mis à jour.

Pour afficher le script de synchronisation

  • Dans le menu Données, pointez sur Comparaison de schémas et cliquez sur Afficher le script de mise à jour du schéma.

    Notes

    Si Afficher le script de mise à jour du schéma n'est pas disponible, aucun script ne peut être généré pour la cible que vous avez spécifiée ou la comparaison doit être actualisée. Par exemple, si votre schéma cible est un fichier .dbschema, vous ne pouvez pas créer de script de mise à jour.

    La fenêtre Script de mise à jour du schéma apparaît et affiche le script que vous pouvez utiliser pour mettre à jour la cible pour qu'elle corresponde à la source.

    Notes

    Si la fenêtre Script de mise à jour du schéma est ouverte, vous pouvez également cliquer sur Actualiser les scripts de mise à jour du schéma.

Pour ouvrir le script de synchronisation dans l'éditeur Transact-SQL

  • Dans le menu Données, pointez successivement sur Comparaison de schémas et Exporter vers, puis cliquez sur Éditeur.

    L'éditeur Transact-SQL apparaît et affiche le script que vous pouvez utiliser pour mettre à jour la cible pour qu'elle corresponde à la source.

Pour enregistrer le script de synchronisation dans un fichier

  1. Dans le menu Données, pointez successivement sur Comparaison de schémas et Exporter vers, puis cliquez sur Fichier.

    La boîte de dialogue Enregistrer le script de mise à jour de schéma apparaît.

  2. Dans Nom de l'objet, tapez le nom que vous souhaitez donner au script de synchronisation, puis cliquez sur Enregistrer.

    Le script est enregistré avec le nom de fichier que vous avez spécifié.

Synchronisation d'objets serveur ou de base de données

Après avoir comparé les schémas de la source et de la cible, vous pouvez synchroniser l'intégralité d'un schéma ou uniquement les objets de base de données que vous spécifiez dans ce schéma. Pour plus d'informations, consultez Comparer et synchroniser des schémas de base de données.

Si la source et la cible se trouvent sur le même serveur, une erreur peut se produire lorsque vous tentez de synchroniser les schémas. L'erreur se produit parce que les fichiers cible, tels que les fichiers de groupe de fichiers, ne peuvent pas être créés avec le même nom que la source, car ils existent déjà sur le serveur. Pour résoudre ce problème, remplacez Mettre à jour l'action par Ignorer pour les fichiers qui sont en conflit.

Notes

Les bases de données que vous comparez sont appelées la source et la cible. Lorsque vous synchronisez des schémas de base de données, vous mettez à jour la cible et laissez la source inchangée. Bien que vous puissiez spécifier un fichier projet (.dbschema) comme étant la cible, vous ne pouvez pas le mettre à jour.

Pour mettre à jour le schéma cible

  1. Comparez deux schémas.

    Une fois la comparaison terminée, la fenêtre Comparaison de schémas répertorie les objets de base de données comparés. Chaque ligne représente un objet de base de données.

  2. (Facultatif) Dans la colonne Mettre à jour l'action, spécifiez s'il convient d'appliquer ou d'ignorer la mise à jour pour chaque objet de la liste des résultats.

    Les actions de synchronisation individuelles ne sont pas exécutées immédiatement mais stockées pour une exécution du lot à l'étape suivante.

    Notes

    Pour rétablir la colonne Mettre à jour l'action pour tous les objets d'un type particulier, cliquez avec le bouton droit sur ce type (par exemple, le nœud Tables), puis cliquez sur Paramètres par défaut. Pour affecter un état spécifique à la colonne Mettre à jour l'action pour tous les objets d'un type particulier, cliquez avec le bouton droit de la souris sur le nœud pour ce type, puis cliquez sur Créer tout, Tout mettre à jour ou encore Ignorer tout.

  3. Pour synchroniser des objets de base de données qui sont différents, manquants ou nouveaux, effectuez l'une des opérations suivantes :

    • Pour mettre la cible à jour immédiatement, cliquez sur Écrire les mises à jour.

      À l'exception des objets marqués comme à Ignorer, ce choix applique le schéma des objets de base de données sélectionnés dans la source sur les objets correspondants dans la cible. Cette synchronisation signifie la mise à jour, la création ou la suppression de l'objet cible.

      Important

      Pendant que le schéma est mis à jour, vous pouvez annuler l'opération en cliquant sur Arrêter l'écriture dans la cible. Si vous arrêtez la mise à jour, aucune modification n'est propagée pour la plupart des types d'objets. Toutefois, des modifications partielles apportées à des objets Utilisateur et Rôle ne peuvent pas être restaurées car ces objets ne peuvent pas être encapsulés dans des transactions.

    • Pour examiner les modifications avant de mettre à jour la cible, utilisez la fenêtre Script de mise à jour du schéma ou cliquez sur Exporter vers l'éditeur.

      Ce choix génère un script Transact-SQL et l'ouvre dans une fenêtre de l'éditeur Transact-SQL. Vous pouvez examiner et, si nécessaire, modifier le script avant de l'exécuter par rapport à la cible. Le script Transact-SQL ainsi généré correspond à celui qui est exécuté si vous avez cliqué sur Écrire les mises à jour.

      Notes

      Visual Studio n'actualise pas automatiquement les résultats qui s'affichent dans la fenêtre Comparaison de schémas, une fois l'action Écrire les mises à jour terminée. Au lieu de cela, la barre d'état est mise à jour pour suggérer que vous cliquiez sur Actualiser. Ce comportement vous donne la possibilité de comparer à nouveau les schémas, action qui peut nécessiter beaucoup de temps si les schémas sont volumineux.

    • Pour enregistrer des modifications dans un fichier sans les afficher dans l'éditeur Transact-SQL, cliquez sur Exporter vers un fichier.

      Ce choix génère un script Transact-SQL et l'enregistre avec le nom de fichier que vous spécifiez. Le script généré correspond à celui qui est exécuté si vous avez cliqué sur Écrire les mises à jour. Vous pouvez adopter cette approche si une autre personne est appelée à mettre à jour la cible ultérieurement avec le script que vous fournissez, ou encore si d'autres modifications doivent être apportées au script par une autre personne.

Comparer des schémas à l'aide de VSDBCMD.EXE

Vous pouvez générer un script de déploiement pour une base de données à laquelle vous n'avez pas accès. Pour cela, vous pouvez utiliser VSDBCMD.EXE si vous avez le fichier .dbschema du projet que vous souhaitez déployer et le fichier .dbschema qui représente l'état actuel de la base de données cible. Si vous n'avez pas le schéma cible, vous pouvez demander à votre administrateur de base de données de l'importer pour vous à l'aide de la deuxième procédure de cette section.

Vous pouvez effectuer ces deux procédures sur tout ordinateur équipé de l'outil VSDBCMD.EXE et des fichiers de prise en charge. Vous trouverez tous les fichiers requis dans le dossier suivant et ses sous-dossiers : %PROGRAM FILES%\Microsoft Visual Studio 10.0\VSTSDB\Deploy. Pour plus d'informations, consultez Référence de ligne de commande pour VSDBCMD.EXE (déploiement et importation de schéma).

Pour comparer des schémas au niveau d'une invite de commandes

  1. Ouvrez une invite de commandes.

  2. Accédez au dossier qui contient VSDBCMD.EXE.

  3. À l'invite de commandes, tapez la commande suivante : vsdbcmd.exe /a:deploy /dd:- /dsp:sql /model:ProjectName.dbschema /targetmodelfile:TargetDatabase.dbschema /DeploymentScriptFile:OutputFilename.sql /p:TargetDatabase="TargetDatabaseName"

    Remplacez ProjectName par le nom du fichier .dbschema que vous avez créé en générant votre projet de base de données. Remplacez TargetDatabase par le nom du fichier .dbschema qui contient le schéma pour la base de données cible. Remplacez OutputFilename par le nom que vous souhaitez donner au script de déploiement. Remplacez TargetDatabaseName par le nom de la base de données que vous souhaitez mettre à jour.

    Notes

    Si vous souhaitez inclure le script de prédéploiement et de post-déploiement à partir du projet de base de données, vous pouvez ajouter un paramètre à la ligne de commande : /ManifestFile:ProjectName.deploymanifest. Vous trouverez le fichier .deploymanifest dans un sous-dossier du dossier sql, sous votre dossier du projet.

  4. Vous pouvez maintenant utiliser le fichier OutputFilename.sql pour déployer des mises à jour vers le serveur cible, ou vous pouvez demander à votre administrateur de base de données de le faire.

Pour importer le schéma cible

  1. Ouvrez une invite de commandes.

  2. Accédez au dossier qui contient VSDBCMD.EXE.

  3. À l'invite de commandes, tapez la commande suivante : vsdbcmd.exe /a:Import /dsp:sql /model:TargetDatabase.dbschema /cs:ConnectionString

    Remplacez TargetDatabase par le nom du fichier .dbschema que vous importez à partir de la base de données cible. Remplacez ConnectionString par une chaîne de connexion à la base de données cible. Par exemple, vous pouvez spécifier /cs:"Data Source=MyServer/SQL2K8;Integrated Security=True;Pooling=False;Initial Catalog=MyDatabase".

    Lorsque l'exécution de la commande est terminée, le fichier .dbschema est créé. Il contient la définition de schéma de la base de données à partir de laquelle vous l'avez importé. Pour plus d'informations, consultez Comment : importer un schéma à partir d'une invite de commandes et Référence de ligne de commande pour VSDBCMD.EXE (déploiement et importation de schéma).

Voir aussi

Tâches

Comment : comparer et synchroniser les données de deux bases de données

Concepts

Comparer et synchroniser des schémas de base de données

Historique des modifications

Date

Historique

Motif

Juillet 2010

Informations ajoutées sur l'utilisation de VSDBCMD.EXE pour comparer des schémas à partir d'une invite de commandes.

Commentaires client.