Déploiement de bases de données SQL Server de Test à Live

Translate

Je me demande comment vous gérez le déploiement d'une base de données entre 2 serveurs SQL, en particulier SQL Server 2005. Maintenant, il y a un développement et un live. Comme cela devrait faire partie d'un buildscript (lot Windows standard, même avec la complexité actuelle de ces scripts, je pourrais passer à PowerShell ou plus tard), Enterprise Manager / Management Studio Express ne compte pas.

Voulez-vous simplement copier le fichier .mdf et le joindre? Je suis toujours un peu prudent lorsque je travaille avec des données binaires, car cela semble être un problème de compatibilité (même si le développement et le live doivent exécuter la même version du serveur à tout moment).

Ou - étant donné l'absence de "EXPLAIN CREATE TABLE" dans T-SQL - faites-vous quelque chose qui exporte une base de données existante dans des scripts SQL que vous pouvez exécuter sur le serveur cible? Si oui, existe-t-il un outil qui peut automatiquement vider une base de données donnée dans des requêtes SQL et qui s'exécute à partir de la ligne de commande? (Encore une fois, Enterprise Manager / Management Studio Express ne compte pas).

Et enfin, étant donné que la base de données en direct contient déjà des données, le déploiement peut ne pas impliquer la création de toutes les tables mais plutôt la vérification de la différence de structure et ALTER TABLE à la place, ce qui peut également nécessiter une vérification / conversion des données lorsque les champs existants changent.

Maintenant, j'entends beaucoup de bonnes choses sur lePorte rougeproduits, mais pour les projets de loisirs, le prix est un peu élevé.

Alors, qu'utilisez-vous pour déployer automatiquement des bases de données SQL Server de Test à Live?

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

J'ai commencé à coder manuellement toutes mes instructions DDL (crée / modifier / supprimer), en les ajoutant à mon .sln en tant que fichiers texte et en utilisant le contrôle de version normal (en utilisant subversion, mais tout contrôle de révision devrait fonctionner). De cette façon, je profite non seulement de la gestion des versions, mais la mise à jour en direct depuis dev / stage est le même processus pour le code et la base de données - les balises, les branches, etc. fonctionnent tout de même.

Sinon, je conviens que Redgate est cher si vous n'avez pas d'entreprise qui l'achète pour vous. Si vous pouvez faire en sorte qu'une entreprise l'achète pour vous, cela en vaut vraiment la peine!

La source
Translate

Pour mes projets j'alterne entre SQL Compare de REd Gate et l'assistant de publication de base de données de Microsoft que vous pouvez télécharger gratuitementici.

L'assistant n'est pas aussi astucieux que SQL Compare ou SQL Data Compare, mais il fait l'affaire. L'un des problèmes est que les scripts qu'il génère peuvent nécessiter une réorganisation et / ou une édition pour se dérouler en une seule fois.

D'un autre côté, il peut déplacer votre schéma et vos données, ce qui n'est pas mauvais pour un outil gratuit.

La source
Translate

N'oubliez pas la solution de Microsoft au problème:Édition de base de données Visual Studio 2008. Inclut des outils pour déployer des changements dans des bases de données, produire un diff entre des bases de données pour des changements de schéma et / ou de données, des tests unitaires, la génération de données de test.

C'est assez cher mais j'ai utilisé l'édition d'essai pendant un certain temps et j'ai pensé que c'était génial. Cela rend la base de données aussi facile à utiliser que n'importe quel autre morceau de code.

La source
Translate

Comme Rob Allen, j'utilise SQL Compare / Data Compare by Redgate. J'utilise également l'assistant de publication de base de données de Microsoft. J'ai également une application console que j'ai écrite en C # qui prend un script sql et l'exécute sur un serveur. De cette façon, vous pouvez exécuter des scripts volumineux contenant des commandes «GO» à partir d'une ligne de commande ou d'un script batch.

J'utilise les bibliothèques Microsoft.SqlServer.BatchParser.dll et Microsoft.SqlServer.ConnectionInfo.dll dans l'application console.

La source
Translate

Je travaille de la même manière que Karl, en conservant tous mes scripts SQL pour créer et modifier des tables dans un fichier texte que je garde sous contrôle de code source. En fait, pour éviter le problème d'avoir à faire examiner la base de données en direct par un script pour déterminer les ALTER à exécuter, je travaille généralement comme ceci:

  • Sur la première version, je place tout pendant les tests dans un script SQL et je traite toutes les tables comme un CREATE. Cela signifie que je finis par abandonner et lire beaucoup de tables pendant les tests, mais ce n'est pas un gros problème au début du projet (puisque je pirate généralement les données que j'utilise à ce stade de toute façon).
  • Sur toutes les versions suivantes, je fais deux choses: je crée un nouveau fichier texte pour contenir les scripts SQL de mise à niveau, qui contiennent uniquement les ALTER pour cette version. Et j'apporte les modifications à l'original, crée également un nouveau script de base de données. De cette façon, une mise à niveau exécute simplement le script de mise à niveau, mais si nous devons recréer la base de données, nous n'avons pas besoin d'exécuter 100 scripts pour y arriver.
  • En fonction de la façon dont je déploie les modifications de la base de données, je mettrai également généralement une table de version dans la base de données qui contient la version de la base de données. Ensuite, plutôt que de prendre des décisions humaines sur les scripts à exécuter, quel que soit le code que j'ai exécutant les scripts de création / mise à niveau, utilise la version pour déterminer ce qu'il faut exécuter.

La seule chose que cela ne fera pas est d'aider si une partie de ce que vous passez du test à la production est des données, mais si vous voulez gérer la structure et ne pas payer pour un package de gestion de base de données agréable mais coûteux, ce n'est vraiment pas très difficile. J'ai également trouvé que c'était un très bon moyen de garder une trace mentale de votre DB.

La source
Translate

Si vous avez une entreprise qui l'achète, Toad de Quest Software intègre ce type de fonctionnalité de gestion. Il s'agit essentiellement d'une opération en deux clics pour comparer deux schémas et générer un script de synchronisation de l'un à l'autre.

Ils ont des éditions pour la plupart des bases de données populaires, y compris bien sûr Sql Server.

La source
Translate

Je conviens que tout scénariser est la meilleure façon de procéder et c'est ce que je préconise au travail. Vous devez tout script, de la création de base de données et d'objet au remplissage de vos tables de recherche.

Tout ce que vous faites uniquement dans l'interface utilisateur ne sera pas traduit (en particulier pour les changements ... pas tellement pour les premiers déploiements) et finira par nécessiter des outils comme ce que Redgate propose.

La source
Translate

En utilisant SMO / DMO, il n'est pas trop difficile de générer un script de votre schéma. Les données sont un peu plus amusantes, mais toujours réalisables.

En général, j'adopte l'approche "Script It", mais vous voudrez peut-être envisager quelque chose du genre:

  • Faites la distinction entre le développement et la mise en scène, de sorte que vous puissiez développer avec un sous-ensemble de données ... cela je créerais un outil pour simplement extraire certaines données de production ou générer de fausses données en matière de sécurité.
  • Pour le développement de l'équipe, chaque modification de la base de données devra être coordonnée entre les membres de votre équipe. Les changements de schéma et de données peuvent être entremêlés, mais un seul script doit activer une fonctionnalité donnée. Une fois que toutes vos fonctionnalités sont prêtes, vous les regroupez dans un seul fichier SQL et l'exécutez contre une restauration de la production.
  • Une fois que votre préparation a été acceptée, vous exécutez à nouveau le fichier SQL unique sur la machine de production.

J'ai utilisé les outils Red Gate et ils sontgénialoutils, mais si vous ne pouvez pas vous le permettre, construire les outils et travailler de cette façon n'est pas trop loin de l'idéal.

La source
Translate

J'utilise le mécanisme de migration de Subsonic, donc j'ai juste une dll avec des classes dans l'ordre carré qui ont 2 méthodes, haut et bas. Il existe un hook d'intégration / build continu dans nant, afin que je puisse automatiser la mise à niveau de ma base de données.

Ce n'est pas le meilleur thign au monde, mais il bat le DDL.

La source
Translate

RedGate SqlComparerest une voie à suivre à mon avis. Nous déployons régulièrement des bases de données et depuis que j'ai commencé à utiliser cet outil, je n'ai jamais regardé en arrière. Interface très intuitive et permet de gagner beaucoup de temps au final.

La version Pro se chargera également du script pour l'intégration du contrôle de source.

La source
Translate

Je gère également des scripts pour tous mes objets et données. Pour le déploiement, j'ai écrit cet utilitaire gratuit -http://www.sqldart.com. Cela vous permettra de réorganiser vos fichiers de script et d'exécuter le tout dans une transaction.

La source
Translate

Je suis d'accord pour garder tout dans le contrôle de code source et écrire manuellement tous les changements. Les modifications apportées au schéma pour une seule version vont dans un fichier de script créé spécifiquement pour cette version. Tous les processus, vues, etc. stockés doivent être placés dans des fichiers individuels et traités comme .cs ou .aspx en ce qui concerne le contrôle de code source. J'utilise un script PowerShell pour générer un gros fichier .sql pour mettre à jour les éléments de programmabilité.

Je n'aime pas automatiser l'application des changements de schéma, comme les nouvelles tables, les nouvelles colonnes, etc. Lorsque je fais une version de production, j'aime passer par la commande de script de changement par commande pour m'assurer que chacun fonctionne comme prévu. Il n'y a rien de pire que d'exécuter un gros script de changement en production et d'obtenir des erreurs parce que vous avez oublié un petit détail qui ne s'est pas présenté lors du développement.

J'ai également appris que les index doivent être traités comme des fichiers de code et placés sous contrôle de code source.

Et vous devriez certainement avoir plus de 2 bases de données - dev et live. Vous devriez avoir une base de données de développement que tout le monde utilise pour les tâches de développement quotidiennes. Ensuite, une base de données intermédiaire qui imite la production et est utilisée pour faire vos tests d'intégration. Ensuite, peut-être une copie récente complète de la production (restaurée à partir d'une sauvegarde complète), si cela est faisable, de sorte que votre dernière série de tests d'installation va à l'encontre de quelque chose qui est aussi proche que possible de la réalité.

La source
Translate

Je crée toute ma base de données en tant que DDL, puis j'emballe ce DDL dans une classe de maintenance de schéma. Je peux faire diverses choses pour créer le DDL en premier lieu, mais fondamentalement, je fais tout le schéma maint dans le code. Cela signifie également que si l'on a besoin de faire des choses non DDL qui ne correspondent pas bien à SQL, vous pouvez écrire une logique procédurale et l'exécuter entre des morceaux de DDL / DML.

Mes dbs ont alors une table qui définit la version actuelle afin que l'on puisse coder un ensemble de tests relativement simple:

  1. La DB existe-t-elle? Sinon, créez-le.
  2. La base de données est-elle la version actuelle? Sinon, exécutez les méthodes, dans l'ordre, qui mettent le schéma à jour (vous pouvez demander à l'utilisateur de confirmer et - idéalement - de faire des sauvegardes à ce stade).

Pour une application à un seul utilisateur, je l'exécute simplement en place, pour une application Web, nous devons actuellement verrouiller l'utilisateur si les versions ne correspondent pas et avoir une application de maintenance de schéma autonome que nous exécutons. Pour les utilisateurs multiples, cela dépendra de l'environnement particulier.

L'avantage? Eh bien, je suis convaincu que le schéma des applications qui utilisent cette méthodologie est cohérent dans toutes les instances de ces applications. Ce n'est pas parfait, il y a des problèmes, mais ça marche ...

Il y a quelques problèmes lors du développement dans un environnement d'équipe mais c'est plus ou moins acquis quand même!

Murph

La source
Translate

Je travaille actuellement la même chose pour vous. Non seulement le déploiement de bases de données SQL Server du test à la phase de production, mais également l'ensemble du processus de Local -> Intégration -> Test -> Production. Alors ce qui peut me rendre facilement tous les jours, c'est que je le faisTâche NAnt avec Red-Gate SQL Compare. Je ne travaille pas pour RedGate mais je dois dire que c'est un bon choix.

La source