Déploiement de bases de données SQL Server de test to Live

voix
24

Je me demande comment les gars gérer le déploiement d'une base de données entre 2 serveurs SQL, notamment SQL Server 2005. Maintenant, il y a un développement et un vivant. Comme cela devrait faire partie d'une buildscript (fenêtres standard lot, même faire avec complexité actuelle de ces scripts, je pourrais passe à 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 vous travaillez avec des données binaires, comme cela semble être un problème de compatibilité (même si le développement et vivre doivent exécuter la même version du serveur à tout moment).

Ou - étant donné le manque de « EXPLIQUER CREATE TABLE » dans T-SQL - faites-vous quelque chose qui exporte une base de données existante dans SQL-scripts que vous pouvez exécuter sur le serveur cible? Si oui, est-il un outil qui peut vider automatiquement une base de données dans des requêtes SQL donnée et qui ruisselle la ligne de commande? (Encore une fois, Enterprise Manager / Management Studio Express ne compte pas).

Et enfin - compte tenu du fait que la base de données en direct le déploiement ne peut contenir des données, déjà impliquer la création de toutes les tables mais plutôt de vérifier la différence de structure et ALTER TABLE les vivants au lieu, qui peuvent aussi avoir besoin de vérification / conversion de données lorsque les champs existants changent.

Maintenant, j'entends beaucoup de grandes choses sur les Red Gate produits, mais pour des projets de passe - temps, le prix est un peu raide.

Alors, qu'est-ce que vous utilisez pour déployer automatiquement les bases de données SQL Server de test à vivre?

Créé 03/08/2008 à 00:30
source utilisateur
Dans d'autres langues...                            


14 réponses

voix
19

J'ai pris au codage à la main tout mon DDL (crée / modifier / supprimer) les déclarations, les ajouter à mon .sln sous forme de fichiers texte, et l'utilisation normale versioning (en utilisant la subversion, mais aucun contrôle de révision devrait fonctionner). De cette façon, non seulement j'obtenir le bénéfice de versioning, mais la mise à jour en direct de dev / étape est le même processus pour le code et la base de données - tags, branches et ainsi sur le travail tout de même.

Sinon, je suis d'accord Redgate est cher si vous ne disposez pas d'une entreprise d'acheter pour vous. Si vous pouvez obtenir une entreprise d'acheter pour vous cependant, il vaut vraiment la peine!

Créé 03/08/2008 à 00:51
source utilisateur

voix
14

Pour mes projets j'alterne entre SQL Comparer de Hongchang et la base de données Assistant de publication de Microsoft que vous pouvez télécharger gratuitement ici .

L'Assistant est pas aussi lisse que SQL Comparer ou SQL Data Comparer mais il fait l'affaire. Un problème est que les scripts qu'il génère peuvent avoir besoin de réagencement et / ou l'édition à l'écoulement d'un seul coup.

Sur le côté vers le haut, il peut se déplacer votre schéma et les données qui ne sont pas mauvais pour un outil gratuit.

Créé 03/08/2008 à 00:40
source utilisateur

voix
7

Ne pas oublier la solution de Microsoft au problème: Visual Studio 2008 Database Edition . Inclut des outils pour le déploiement de modifications apportées aux bases, produisant un diff entre les bases de données pour schéma et / ou des changements de données, tests unitaires, la génération de tests de données.

Il est assez cher mais j'utilisé l'édition d'essai pendant un certain temps et pensait qu'il était brillant. Il rend la base de données aussi facile de travailler avec comme tout autre morceau de code.

Créé 18/08/2008 à 11:47
source utilisateur

voix
6

Comme Rob Allen, j'utilise SQL Comparer / données Comparer par Redgate. Je l'utilise aussi l'assistant d'édition de base de données Microsoft. J'ai aussi une application console je l'ai écrit en C # qui prend un script SQL et fonctionne sur un serveur. De cette façon, vous pouvez exécuter des scripts avec de grandes commandes « GO » en elle d'une ligne de commande ou dans un script batch.

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

Créé 04/08/2008 à 19:00
source utilisateur

voix
4

Je travaille de la même façon Karl fait, en gardant tous mes scripts SQL pour créer et modifier des tables dans un fichier texte que je garde dans le contrôle source. En fait, pour éviter le problème de devoir avoir un script d'examiner la base de données en direct pour déterminer ce ALTERs à courir, je travaille généralement comme ceci:

  • Sur la première version, je place tout au cours de test dans un script SQL, et de traiter toutes les tables comme CREATE. Cela signifie que je finis par tomber et tables readding beaucoup pendant les essais, mais ce n'est pas un gros problème au début dans le projet (depuis que je suis généralement le piratage des données que je utilise à ce moment-là de toute façon).
  • Sur toutes les versions ultérieures, je fais deux choses: je fais un nouveau fichier texte pour contenir la mise à niveau des scripts SQL, qui contiennent seulement les ALTERs pour cette version. Et je fais des changements à la même origine, créer un script de nouvelle base de données. De cette façon, une mise à niveau passe juste le script de mise à niveau, mais si nous devons recréer la DB on n'a pas besoin d'exécuter des scripts 100 pour y arriver.
  • Selon la façon dont je le déploiement des changements DB, je vais généralement aussi mettre une table de version dans la base de données qui contient la version de la DB. Alors, plutôt que de prendre des décisions humaines dont l'exécution de scripts, quel que soit le code que j'ai en cours d'exécution les créer / mettre à jour des scripts utilise la version pour déterminer ce qu'il faut exécuter.

La seule chose que ce ne sera pas faire est d'aider si une partie de ce que vous vous déplacez de l'essai à la production est de données, mais si vous souhaitez gérer la structure et ne pas payer pour un bien, mais coûteux paquet de gestion de DB, est vraiment pas très difficile. Je l'ai aussi trouvé que c'est une très bonne façon de garder la trace mentale de votre DB.

Créé 03/08/2008 à 01:37
source utilisateur

voix
3

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

En général, je prends approche « Script It », mais vous pourriez vouloir envisager quelque chose le long de ces lignes:

  • Faire la distinction entre le développement et Mise en scène, de sorte que vous pouvez développer un sous-ensemble de données ... ce je créer un outil pour tirer simplement vers le bas des données de production, ou de générer des données fausses ou qui concerne la sécurité.
  • Pour le développement de l'équipe, chaque changement de la base de données devra être coordonnée entre les membres de votre équipe. Schéma et les modifications de données peuvent être entremêlées, mais un script unique devrait permettre une fonctionnalité donnée. Une fois que toutes vos fonctions sont prêts, vous regroupez ces dans un seul fichier SQL et exécutez que contre une restauration de la production.
  • Une fois que votre mise en scène a autorisé l'acceptation, vous exécutez à nouveau le seul fichier SQL sur la machine de production.

Je l' ai utilisé les outils Red Gate et ils sont de grands outils, mais si vous ne pouvez pas le permettre, la construction des outils et travailler de cette façon est pas trop loin de l'idéal.

Créé 04/08/2008 à 18:38
source utilisateur

voix
3

Si vous avez une entreprise acheter, Crapaud de Quest Software a ce type de fonctionnalité de gestion intégrée. Il est essentiellement une opération en deux clics pour comparer deux schémas et générer un script de synchronisation d'un à l'autre.

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

Créé 03/08/2008 à 01:22
source utilisateur

voix
2

Je maintiens également des scripts pour tous mes objets et données. Pour le déploiement , j'ai écrit cet utilitaire gratuit - http://www.sqldart.com . Il va vous permettre de réorganiser vos fichiers de script et courrez le tout dans une transaction.

Créé 08/06/2010 à 22:33
source utilisateur

voix
2

Redgate SqlCompare est un moyen d'aller à mon avis. Nous faisons le déploiement DB sur une base régulière et que je commencé à utiliser cet outil je n'ai jamais regardé en arrière. Interface très intuitive et permet d' économiser beaucoup de temps à la fin.

La version Pro se chargera de scripts pour l'intégration de contrôle de code source ainsi.

Créé 28/08/2008 à 01:22
source utilisateur

voix
2

J'utilise le mécanisme des migrations de Subsonic donc j'ai juste une dll avec des classes afin squential qui ont 2 méthodes, haut et bas. Il y a un crochet de script d'intégration / construction continue dans Nant, afin que je puisse automatiser la mise à niveau de ma base de données.

Ce ne est pas le meilleur thign dans le monde, mais il bat l'écriture DDL.

Créé 26/08/2008 à 18:39
source utilisateur

voix
2

Je suis d'accord avec le maintien de tout contrôle de code source et les scripts manuellement toutes les modifications. Les modifications apportées au schéma pour une seule version entrent dans un fichier de script créé spécifiquement pour cette version. Tous les procs stockées, vues, etc devraient aller dans des fichiers individuels et traités comme .cs ou .aspx aussi loin que va le contrôle source. J'utilise un script Powershell pour générer un gros fichier sql pour mettre à jour les trucs de programmabilité.

Je n'aime pas l'automatisation de l'application des modifications du schéma, comme de nouvelles tables, de nouvelles colonnes, etc. Lors d'une version de production, j'aime passer par la commande de script de changement par commande pour vous assurer que chacun fonctionne comme prévu. Il n'y a rien de pire que de courir un grand script de changement sur la production et obtenir des erreurs car vous avez oublié un petit détail qui ne se présente dans le développement.

J'ai aussi appris que les indices doivent être traités comme des fichiers de code et de mettre dans le contrôle source.

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

Créé 13/08/2008 à 16:41
source utilisateur

voix
2

Je suis d'accord que tout script est la meilleure façon d'aller est ce que je défends au travail. Vous devez tout de scripts DB et la création d'objets pour peupler vos tables de recherche.

Tout ce que vous faites dans l'interface utilisateur ne sera pas traduire (en particulier pour les changements ... pas tant pour les premiers déploiements) et finira par exiger un des outils comme ce qui offre Redgate.

Créé 03/08/2008 à 02:38
source utilisateur

voix
1

Je travaille actuellement la même chose pour vous. Non seulement le déploiement de bases de données SQL Server de test pour vivre , mais aussi inclure l'ensemble du processus local -> Intégration -> Test -> Production. Alors , que peut me faire facilement tous les jours est que je ne tâche NAnt avec Red-Gate SQL Comparer . Je ne travaille pas pour Redgate mais je dois dire qu'il est bon choix.

Créé 27/11/2008 à 04:15
source utilisateur

voix
1

Je fais tout mes création de base de données, puis les envelopper DDL que dans une classe LDD de maintainence de schéma. Je peux faire des choses différentes 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 sont pas bien adaptées à SQL, vous pouvez écrire une logique procédurale et l'exécuter entre morceaux de DDL / DML.

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

  1. Le DB existe? Si créer pas.
  2. La DB la version actuelle? Sinon exécutez les méthodes, dans l'ordre, qui amènent le schéma à jour (vous pouvez inviter l'utilisateur à confirmer et - idéalement - faire des sauvegardes à ce stade).

Pour une application unique de l'utilisateur que je viens de lancer cela en place, pour une application web nous actuellement pour verrouiller l'utilisateur si les versions ne correspondent pas et ont une application schéma autonome maint nous courons. Pour plusieurs utilisateurs, il dépendra de l'environnement particulier.

L'avantage? Eh bien, j'ai un très haut niveau de confiance que le schéma pour les applications qui utilisent cette méthode est cohérente dans tous les cas de ces applications. Son pas parfait, il y a des problèmes, mais il fonctionne ...

Il y a quelques problèmes lors du développement dans un environnement d'équipe, mais qui est plus ou moins donné de toute façon!

Murph

Créé 26/08/2008 à 16:38
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more