Déploiement de projets de base de données

par Jason Lee

Notes

Dans de nombreux scénarios de déploiement d’entreprise, vous avez besoin de la possibilité de publier des mises à jour incrémentielles sur une base de données déployée. L’alternative consiste à recréer la base de données sur chaque déploiement, ce qui signifie que vous perdez toutes les données de la base de données existante. Lorsque vous utilisez Visual Studio 2010, l’utilisation de VSDBCMD est l’approche recommandée pour la publication de base de données incrémentielle. Toutefois, la prochaine version de Visual Studio et du pipeline de publication web (WPP) inclura des outils qui prennent directement en charge la publication incrémentielle.

Si vous ouvrez l’exemple de solution Gestionnaire de contacts dans Visual Studio 2010, vous verrez que le projet de base de données inclut un dossier Propriétés qui contient quatre fichiers.

Si vous ouvrez l’exemple de solution Gestionnaire de contacts dans Visual Studio 2010, vous verrez que le projet de base de données inclut un dossier Propriétés qui contient quatre fichiers.

Avec le fichier projet (ContactManager.Database.dbproj dans ce cas), ces fichiers contrôlent différents aspects du processus de génération et de déploiement :

  • Le fichier Database.sqlcmdvars fournit des valeurs pour toutes les variables SQLCMD que vous utilisez lorsque vous déployez le projet. Chaque configuration de solution (par exemple, débogage et version) peut spécifier un fichier .sqlcmdvars différent.
  • Le fichier Database.sqldeployment fournit des paramètres spécifiques au déploiement, comme s’il faut utiliser le classement défini dans votre projet ou le classement du serveur de destination, recréer la base de données de destination à chaque fois ou simplement modifier la base de données existante pour la mettre à jour, et ainsi de suite. Chaque configuration de solution peut spécifier un fichier .sqldeployment différent.
  • Le fichier Database.sqlpermissions est un document XML que vous pouvez utiliser pour définir les autorisations que vous souhaitez ajouter à la base de données cible. Toutes les configurations de solution partagent le même fichier .sqlpermissions.
  • Le fichier Database.sqlsettings spécifie les propriétés au niveau de la base de données à utiliser lors de la création de la base de données, comme le classement à utiliser, le comportement des opérateurs de comparaison, etc. Toutes les configurations de solution partagent le même fichier .sqlsettings.

Il est utile de prendre un moment pour ouvrir ces fichiers dans Visual Studio et vous familiariser avec le contenu.

Lorsque vous générez un projet de base de données, le processus de génération crée deux fichiers :

  • Schéma de base de données (fichier .dbschema). Cela décrit le schéma de la base de données que vous souhaitez créer au format XML.
  • Manifeste de déploiement (fichier .deploymanifest). Il contient toutes les informations nécessaires pour créer et déployer votre base de données. Il fait référence au fichier .dbschema ainsi qu’à d’autres ressources, comme les instructions de déploiement (le fichier .sqldeployment) et les scripts SQL avant le déploiement ou après le déploiement.

Cela montre la relation entre ces ressources :

Relation entre les ressources ci-dessus

Comme vous pouvez le voir, le fichier .sqlsettings et le fichier .sqlpermissions sont des entrées dans le processus de génération. Avec le fichier projet de base de données, ces fichiers sont utilisés pour créer le fichier de schéma de base de données. Le fichier .sqldeployment et le fichier .sqlcmdvars passent le processus de génération inchangé. Le manifeste de déploiement indique l’emplacement du schéma de base de données, le fichier .sqldeployment, le fichier .sqlcmdvars et tous les scripts SQL de prédéploiement ou de post-déploiement.

Pourquoi utiliser VSDBCMD pour déployer un projet de base de données ?

Il existe différentes approches pour déployer des projets de base de données. Toutefois, elles ne conviennent pas toutes au déploiement d’un projet de base de données sur des serveurs distants dans un environnement d’entreprise. Réfléchissez à ce que vous voulez d’un déploiement de projet de base de données. Dans les scénarios de déploiement d’entreprise, il est probable que vous souhaitiez :

  • Possibilité de déployer le projet de base de données à partir d’un emplacement distant.
  • Possibilité d’effectuer des mises à jour incrémentielles à une base de données existante.
  • Possibilité d’inclure des scripts de prédéploiement ou de post-déploiement.
  • Possibilité d’adapter le déploiement à plusieurs environnements de destination.
  • La possibilité de déployer le projet de base de données dans le cadre d’un déploiement de solution en une seule étape, généralement scripté.

Il existe trois approches main que vous pouvez utiliser pour déployer un projet de base de données :

  • Vous pouvez utiliser la fonctionnalité de déploiement avec le type de projet de base de données dans Visual Studio 2010. Lorsque vous générez et déployez un projet de base de données dans Visual Studio 2010, le processus de déploiement utilise le manifeste de déploiement pour générer un fichier de déploiement SQL spécifique à la configuration de build. Cela crée la base de données si elle n’existe pas déjà ou apporte les modifications nécessaires à la base de données si elle existe déjà. Vous pouvez utiliser SQLCMD.exe pour exécuter ce fichier sur votre serveur de destination, ou vous pouvez définir Visual Studio pour créer et exécuter le fichier. L’inconvénient de cette approche est que vous n’avez qu’un contrôle limité sur les paramètres de déploiement. Vous devrez souvent également modifier le fichier de déploiement SQL pour fournir des valeurs de variables spécifiques à l’environnement. Vous pouvez uniquement utiliser cette approche à partir d’un ordinateur sur lequel Visual Studio 2010 est installé. Le développeur doit connaître et fournir des chaînes de connexion et des informations d’identification pour tous les environnements de destination.
  • Vous pouvez utiliser l’outil Web Deployment Tool (Web Deploy) d’Internet Information Services (IIS) pour déployer une base de données dans le cadre d’un projet d’application web. Toutefois, cette approche est beaucoup plus complexe si vous souhaitez déployer un projet de base de données plutôt que simplement répliquer une base de données locale existante sur un serveur de destination. Vous pouvez configurer Web Deploy pour exécuter le script de déploiement SQL généré par le projet de base de données, mais pour ce faire, vous devez créer un fichier cible WPP personnalisé pour votre projet d’application web. Cela ajoute une quantité importante de complexité au processus de déploiement. En outre, Web Deploy ne prend pas directement en charge les mises à jour incrémentielles des bases de données existantes. Pour plus d’informations sur cette approche, consultez Extension du pipeline de publication web au fichier SQL déployé de projet de base de données de package.
  • Vous pouvez utiliser l’utilitaire VSDBCMD pour déployer la base de données, à l’aide du schéma de base de données ou du manifeste de déploiement. Vous pouvez appeler VSDBCMD.exe à partir d’une cible MSBuild, ce qui vous permet de publier des bases de données dans le cadre d’un processus de déploiement scripté plus volumineux. Vous pouvez remplacer les variables de votre fichier .sqlcmdvars et de nombreuses autres propriétés de base de données à partir d’une commande VSDBCMD, ce qui vous permet de personnaliser votre déploiement pour différents environnements sans créer plusieurs configurations de build. VSDBCMD fournit des fonctionnalités de différenciation, ce qui signifie qu’il apporte uniquement les modifications nécessaires pour aligner une base de données de destination sur votre schéma de base de données. VSDBCMD offre également un large éventail d’options de ligne de commande, qui vous donnent un contrôle affiné sur le processus de déploiement.

Dans cette vue d’ensemble, vous pouvez voir que l’utilisation de VSDBCMD avec MSBuild est l’approche la mieux adaptée à un scénario de déploiement d’entreprise classique :

Prise en charge Visual Studio 2010 Web Deploy 2.0 VSDBCMD.exe
Prend en charge le déploiement à distance ? Oui Oui Oui
Prend en charge les mises à jour incrémentielles ? Oui Non Oui
Prend en charge les scripts de pré/post-déploiement ? Oui Oui Oui
Prend en charge le déploiement multi-environnement ? Limité Limité Oui
Prend en charge le déploiement avec script ? Limité Oui Oui

Le reste de cette rubrique décrit l’utilisation de VSDBCMD avec MSBuild pour déployer des projets de base de données.

Présentation du processus de déploiement

L’utilitaire VSDBCMD vous permet de déployer une base de données à l’aide du schéma de base de données (fichier .dbschema) ou du manifeste de déploiement (fichier .deploymanifest). Dans la pratique, vous utiliserez presque toujours le manifeste de déploiement, car le manifeste de déploiement vous permet de fournir des valeurs par défaut pour différentes propriétés de déploiement et d’identifier tous les scripts SQL de prédéploiement ou de post-déploiement que vous souhaitez exécuter. Par exemple, cette commande VSDBCMD est utilisée pour déployer la base de données ContactManager sur un serveur de base de données dans un environnement de test :

vsdbcmd.exe /a:Deploy
            /manifest:"…\ContactManager.Database.deploymanifest"
            /cs:"Data Source=TESTDB1;Integrated Security=true"
            /p:TargetDatabase=ContactManager
            /dd+
            /script:"…\Publish-ContactManager-Db.sql"

Dans ce cas :

  • Le commutateur /a (ou /Action) spécifie ce que vous souhaitez que VSDBCMD fasse. Vous pouvez définir cette valeur sur Importer ou Déployer. L’option Importer est utilisée pour générer un fichier .dbschema à partir d’une base de données existante, et l’option Déployer permet de déployer un fichier .dbschema sur une base de données cible.
  • Le commutateur /manifest (ou /ManifestFile) identifie le fichier .deploymanifest que vous souhaitez déployer. Si vous souhaitez utiliser le fichier .dbschema à la place, vous utiliserez le commutateur /model (ou /ModelFile).
  • Le commutateur /cs (ou /ConnectionString) fournit la chaîne de connexion pour le serveur de base de données cible. Notez que cela n’inclut pas le nom de la base de données : VSDBCMD doit se connecter au serveur pour créer la base de données ; il n’a pas besoin de se connecter à une base de données individuelle. Si votre fichier .deploymanifest inclut une chaîne de connexion, vous pouvez omettre ce commutateur. Si vous utilisez le commutateur quand même, la valeur du commutateur remplacera la valeur .deploymanifest.
  • La propriété /p:TargetDatabase fournit le nom que vous souhaitez affecter à la base de données cible lors de la création. Cela remplace la valeur de la propriété TargetDatabase dans le fichier .deploymanifest. Vous pouvez utiliser la syntaxe /p:[nom de propriété]pour définir une grande variété de propriétés de déploiement et pour remplacer toutes les variables SQLCMD déclarées dans votre fichier .sqlcmdvars.
  • Le commutateur /dd+ (ou /DeployToDatabase+) indique que vous souhaitez créer un déploiement et le déployer dans l’environnement cible. Si vous spécifiez /dd-, ou omettez le commutateur, VSDBCMD génère un script de déploiement, mais ne le déploie pas dans l’environnement cible. Ce commutateur est souvent source de confusion et est expliqué plus en détail dans la section suivante.
  • Le commutateur /script (ou /DeploymentScriptFile) spécifie où vous souhaitez générer le script de déploiement. Cette valeur n’affecte pas le processus de déploiement.

Pour plus d’informations sur VSDBCMD, consultez Informations de référence sur la ligne de commande pour VSDBCMD.EXE (déploiement et importation de schéma) et Guide pratique pour préparer une base de données pour le déploiement à partir d’une invite de commandes à l’aide de VSDBCMD.EXE.

Pour obtenir un exemple d’utilisation de VSDBCMD à partir d’un fichier projet MSBuild, consultez Présentation du processus de génération. Pour obtenir des exemples de configuration des paramètres de déploiement de base de données pour plusieurs environnements, consultez Personnalisation des déploiements de bases de données pour plusieurs environnements.

Présentation du commutateur DeployToDatabase

Le comportement du commutateur /dd ou /DeployToDatabase varie selon que vous utilisez VSDBCMD avec un fichier .dbschema ou un fichier .deploymanifest. Si vous utilisez un fichier .dbschema, le comportement est assez simple :

  • Si vous spécifiez /dd+ ou /dd, VSDBCMD génère un script de déploiement et déploie la base de données.
  • Si vous spécifiez /dd- ou omettez le commutateur, VSDBCMD génère un script de déploiement uniquement.

Si vous utilisez un fichier .deploymanifest, le comportement est beaucoup plus compliqué. En effet, le fichier .deploymanifest contient un nom de propriété DeployToDatabase qui détermine également si la base de données est déployée.

<DeployToDatabase>False</DeployToDatabase>

La valeur de cette propriété est définie en fonction des propriétés du projet de base de données. Si vous définissez l’action Déployer sur Créer un script de déploiement (.sql), la valeur est False. Si vous définissez l’action Déployer sur Créer un script de déploiement (.sql) et déployer sur la base de données, la valeur est True.

Notes

Ces paramètres sont associés à une configuration de build et à une plateforme spécifiques. Par exemple, si vous configurez des paramètres pour la configuration Debug , puis publiez à l’aide de la configuration Release , vos paramètres ne seront pas utilisés.

Par exemple, si vous configurez des paramètres pour la configuration Debug, puis publiez à l’aide de la configuration Release, vos paramètres ne seront pas utilisés.

Notes

Dans ce scénario, l’action Déployer doit toujours être définie sur Créer un script de déploiement (.sql), car vous ne souhaitez pas que Visual Studio 2010 déploie votre base de données. En d’autres termes, la propriété DeployToDatabase doit toujours avoir la valeur False.

Lorsqu’une propriété DeployToDatabase est spécifiée, le commutateur /dd remplace la propriété uniquement si la valeur de la propriété est false :

  • Si la propriété DeployToDatabase a la valeur False et que vous spécifiez /dd+ ou /dd, VSDBCMD remplace la propriété DeployToDatabase et déploie la base de données.
  • Si la propriété DeployToDatabase a la valeur False et que vous spécifiez /dd- ou omettez le commutateur, VSDBCMD ne déploiera pas la base de données.
  • Si la propriété DeployToDatabase a la valeur True, VSDBCMD ignore le commutateur et déploie la base de données.
  • Un script de déploiement est généré dans chaque cas, que vous déployiez la base de données ou non.

Conclusion

Cette rubrique a fourni une vue d’ensemble du processus de génération et de déploiement pour les projets de base de données dans Visual Studio 2010. Il décrit également comment utiliser VSDBCMD.exe avec MSBuild pour prendre en charge le déploiement de base de données à l’échelle de l’entreprise.

Pour plus d’informations sur la façon dont cela fonctionne dans la pratique, consultez Personnalisation des déploiements de bases de données pour plusieurs environnements.

En savoir plus

Pour plus d’informations sur la personnalisation des déploiements de bases de données en créant un fichier de configuration de déploiement distinct pour chaque environnement, consultez Personnalisation des déploiements de bases de données pour plusieurs environnements. Pour obtenir des conseils sur la configuration des appartenances aux rôles de base de données en exécutant un script de post-déploiement, consultez Déploiement d’appartenances à un rôle de base de données dans des environnements de test. Pour obtenir des conseils sur la gestion de certains des défis uniques imposés par les bases de données d’appartenance, consultez Déploiement de bases de données d’appartenance dans des environnements d’entreprise.

Ces rubriques sur MSDN fournissent des conseils plus larges et des informations générales sur les projets de base de données Visual Studio et le processus de déploiement de base de données :