Déploiement de projets de base de données
par Jason Lee
Remarque
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 incrémentielle de base de données. Toutefois, la prochaine version de Visual Studio et du pipeline de publication web (WPP) inclut des outils qui prennent en charge la publication incrémentielle directement.
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 mise en production) 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, s’il faut 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, et ainsi de suite. Toutes les configurations de solution partagent le même fichier .sqlsettings.
Il vaut la peine d’ouvrir ces fichiers dans Visual Studio et de 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). Cela contient toutes les informations requises pour créer et déployer votre base de données. Il fait référence au fichier .dbschema avec d’autres ressources, comme les instructions de déploiement (fichier .sqldeployment) et tous les scripts SQL de prédéploiement ou de post-déploiement.
Cela montre la relation entre ces ressources :
Comme vous pouvez le voir, le fichier .sqlsettings et le fichier .sqlpermissions sont des entrées dans le processus de génération. En plus du 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, toutes ne conviennent pas au déploiement d’un projet de base de données sur des serveurs distants dans un environnement d’entreprise. Considérez ce que vous souhaitez à partir d’un déploiement de projet de base de données. Dans les scénarios de déploiement d’entreprise, vous souhaiterez probablement :
- Possibilité de déployer le projet de base de données à partir d’un emplacement distant.
- Possibilité d’effectuer des mises à jour incrémentielles vers une base de données existante.
- Possibilité d’inclure des scripts de prédéploiement ou des scripts 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é, plus volumineux.
Il existe trois approches principales 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 basé sur SQL spécifique à la configuration de build. Cela crée la base de données s’il n’existe pas déjà ou apporte des modifications nécessaires à la base de données s’il 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 peut-être souvent modifier le fichier de déploiement SQL pour fournir des valeurs de variables spécifiques à l’environnement. Vous ne pouvez utiliser cette approche qu’à partir d’un ordinateur avec Visual Studio 2010 installé, et le développeur doit savoir et fournir des informations d’identification et des chaîne de connexion pour tous les environnements de destination.
- Vous pouvez utiliser l’outil de déploiement web Iis (Internet Information Services) (Web Deploy) 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 grande 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 pour empaqueter le projet de base de données du fichier SQL déployé.
- 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 plus volumineux et scripté. Vous pouvez remplacer les variables dans votre fichier .sqlcmdvars et un grand nombre d’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’elle apporte uniquement les modifications nécessaires pour aligner une base de données de destination avec votre schéma de base de données. VSDBCMD offre également un large éventail d’options de ligne de commande, ce qui vous donne un contrôle précis sur le processus de déploiement.
À partir de 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 | No | 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 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 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 option sur Importer ou déployer. L’option Import est utilisée pour générer un fichier .dbschema à partir d’une base de données existante, et l’option Deploy est utilisée pour 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 les 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’est pas nécessaire de se connecter à une base de données individuelle. Si votre fichier .deploymanifest inclut un chaîne de connexion, vous pouvez omettre ce commutateur. Si vous utilisez le commutateur de toute façon, la valeur du commutateur remplace 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 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 l’emplacement 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 référence de 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 base de données pour plusieurs environnements.
Présentation du commutateur DeployToDatabase
Le comportement du commutateur /dd ou /DeployToDatabase dépend de l’utilisation de 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 uniquement un script de déploiement.
Si vous utilisez un fichier .deploymanifest, le comportement est beaucoup plus compliqué. Cela est dû au fait que 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 pour créer un script de déploiement (.sql), la valeur est False. Si vous définissez l’action Déployer pour créer un script de déploiement (.sql) et déployer sur la base de données, la valeur est True.
Remarque
Ces paramètres sont associés à une configuration et une plateforme de build spécifiques. Par exemple, si vous configurez les paramètres de la configuration de débogage , puis publiez à l’aide de la configuration Release , vos paramètres ne seront pas utilisés.
Remarque
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 être False.
Lorsqu’une propriété DeployToDatabase est spécifiée, le commutateur /dd remplace uniquement la propriété 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éploie 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 également la base de données.
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 a également décrit 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 le fonctionnement de cette méthode, consultez Personnaliser les déploiements de base de données pour plusieurs environnements.
Pour aller plus loin
Pour plus d’informations sur la personnalisation des déploiements de base de données en créant un fichier de configuration de déploiement distinct pour chaque environnement, consultez Personnalisation des déploiements de base 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 post-déploiement, consultez Déploiement d’appartenances aux rôles de base de données dans des environnements de test. Pour obtenir des conseils sur la gestion de certains des défis uniques que les bases de données d’appartenance imposent, 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 :