Procédures stockées sous contrôle de source, meilleures pratiques


16

J'utilise actuellement Tortoise SVN pour contrôler à la source une application Web .NET. Quelle serait la meilleure façon d'intégrer nos procédures stockées SQL Server dans le contrôle de code source? J'utilise actuellement VS 2010 comme environnement de développement et je me connecte à une base de données SQL Server 2008 R2 hors site à l'aide de SQL Server Data Tools (SSDT).

Ce que j'ai fait dans le passé, c'est d'enregistrer les procs dans un fichier .sql et de garder ces fichiers sous contrôle de source. Je suis sûr qu'il doit y avoir un moyen plus efficace que cela? Existe-t-il une extension que je peux installer sur VS2010, SSDT ou même SQL Server sur la machine de production?


2
Si vous utilisez le type de projet SSDT dans Visual Studio, ajoutez ce projet au contrôle de code source. C'est ça.
Mark Storey-Smith

1
Veuillez clarifier vos objectifs - recherchez-vous simplement le versionnage des objets de base de données, ou essayez-vous également de l'utiliser comme plate-forme de déploiement?
Jon Seigel

Réponses:


14

Il existe des outils, tels que celui de Redgate , mais j'ai toujours trouvé que le mieux était d'enregistrer en tant que fichiers SQL, peut-être même dans un projet de base de données (SSDT?) Dans votre solution.

Parallèlement à cela, je suggère les lignes directrices suivantes:

  • Supposez toujours que la version SVN est "actuelle" / "dernière"
  • Assurez-vous que chaque script que vous exécutez a un " if exists then drop" approprié au début
  • N'oubliez pas d'écrire vos autorisations, le cas échéant

Vous pouvez initialement créer ces fichiers SQL en scriptant directement à partir de SSMS, et vous pouvez définir SSMS pour scripter tous vos " drop" et " create" ainsi que vos autorisations.


Je n'étais pas au courant du type de projet de base de données et je viens juste de commencer à explorer SSDT, mais cela semble prometteur. J'ai opté pour cette solution car il ne dépend pas des outils tiers et je peux facilement déposer les fichiers .sql dans notre contrôle de source actuel.
QFDev

N'autorisez pas non plus les droits des développeurs sur prod et ceux qui ont des droits se déploient uniquement à partir du contrôle de code source.
HLGEM

3
Soyez prudent avec "s'ils existent, supprimez, (re) créez avec une nouvelle définition" si vous changez des tables / vues référencées par d'autres vues / procs. J'ai rencontré des circonstances où la sortie de ces vues dépendantes est corrompue (le type et le contenu des colonnes ont été déplacés mais pas les noms) en raison d'un plan de requête réutilisé sans recompilation en supposant la structure précédente. Une option plus sûre est «s'il n'existe pas, créer un mannequin» suivi de «alter table / view / proc» car alter suivra les enregistrements sysdepends pour invalider les plans selon les besoins et drop + create ne supprimera pas ces enregistrements et create ne recherchera pas références pendantes.
David Spillett

Le commentaire de @DavidSpillett est encore plus important si vous avez des déclencheurs dans le contrôle de version, car drop + create peut échouer même en cas de blocage, cela ne devrait pas arriver avec create dummy + alter
James Z

4

L'enregistrement des fichiers SQL dans le contrôle de code source permet de contrôler uniquement les fichiers SQL. Il ne contrôle pas les modifications des objets de base de données réels, ni n'empêche les modifications simultanées du même objet de base de données par plusieurs utilisateurs (et je suppose que vous aimeriez aussi avoir cela sous contrôle). Ce que nous utilisons est un outil tiers ( version ApexSQL), il s'intègre à la fois avec SSMS et VS, vous pouvez choisir de travailler avec une version de base de données de l'objet ou avec une version de contrôle de source. Si vous modifiez une version de base de données, elle est automatiquement extraite uniquement pour vous, donc personne d'autre ne peut la modifier (elle ne fusionne pas les modifications des différents utilisateurs). Ce n'est que lorsque vous le réenregistrez, que d'autres peuvent le modifier. Et vous pouvez avoir votre version SC différente de la version d'un objet vivant (je l'utilise quand je pars pour la journée et je prévois de terminer les modifications et de la tester le lendemain)



3

Essayez Ankhsvn , hautement recommandé et gratuit.

Depuis la page d'accueil:

AnkhSVN est un fournisseur de contrôle de source Subversion pour Microsoft Visual Studio 2005, 2008, 2010 et 2012 .

AnkhSVN fournit une prise en charge de la gestion du code source Apache ™ Subversion® pour tous les types de projets pris en charge par Visual Studio et vous permet d'effectuer les opérations de contrôle de version les plus courantes directement depuis l'intérieur de l'IDE Microsoft Visual Studio.

Le tableau de bord des modifications en attente vous donne un aperçu unique de votre processus de développement et offre un accès facile au code source et aux fonctionnalités de gestion des problèmes. L'intégration du contrôle de code source approfondi (SCC) vous permet de vous concentrer sur le développement, tandis qu'AnkhSVN garde une trace de toutes vos modifications et vous fournit les outils pour gérer efficacement vos besoins spécifiques.


3

J'ai essayé à la fois RedGate et le projet de base de données de Visual Studio et je préfère stocker la définition de base de données dans le projet de base de données. Dès que la base de données fait partie de la solution, vous pouvez utiliser votre fournisseur de contrôle de source préféré. La plupart ont une excellente intégration de Visual Studio.

Avec les outils SSDT, vous disposez de la «dernière version» de la définition de la base de données, ce qui vous permet de faire facilement des comparaisons de schéma et de générer des scripts de mise à niveau de schéma.

Cela dit, le schéma n'est généralement qu'une partie de l'équasion. Dans la vraie vie, il s'avère que les bases de données contiennent déjà beaucoup de données. Et mes utilisateurs ont tendance à être plutôt déçus lorsqu'ils le perdent.

Donc, dès que j'ai déployé la version 1.0, le besoin se fait sentir de maintenir les scripts de mise à niveau. Parfois, ceux-ci contiennent simplement des modifications de schéma, mais souvent, je dois créer des valeurs par défaut basées sur le contenu d'une autre table, je dois libérer une contrainte particulière jusqu'à ce que j'amorce les données, etc. Habituellement, la simple mise à niveau du schéma ne la coupe pas tout à fait. Ma préférence est d'avoir ces scripts de mise à niveau dans un dossier séparé dans le projet de base de données aussi. Celles-ci ressemblent généralement à une «mise à niveau de la version 1.0 vers la version 1.1».

Mes bases de données ont toujours une table de référence qui m'indique le numéro de version actuel, donc je peux bloquer les mises à niveau incompatibles. La première déclaration de mes scripts de mise à niveau vérifie la version actuelle et renfloue si elle est différente de ce qui est attendu.

Un autre avantage des projets de base de données est de pouvoir déployer différents ensembles de données basés sur le même schéma. J'ai différents jeux de données pour le développement, l'équipe AQ, le test d'acceptation des utilisateurs et les tests d'intégration automatisés. Étant donné qu'un projet de base de données ne peut avoir qu'un seul script de post-déploiement, l'astuce consiste à créer un nouveau projet de base de données qui référence le projet `` maître '' et à intégrer l'ensemble de données personnalisé aux processus de post-déploiement de ce projet.

Ce sont mes 2 cents, quel que soit le processus que vous montez, il doit avant tout vous convenir à vous et à votre équipe et, espérons-le, vous soutenir dans la plupart des tâches courantes.


0

J'ai fini par écrire un outil moi-même.

Il est disponible en téléchargement gratuit - http://www.gitsql.net

J'espère que cela aide d'autres personnes qui souhaitent atteindre le même objectif final.

Voici un article qui décrit comment contrôler la source SQL Server. http://gitsql.net/documentation-04_SQL_Server_and_GIT

J'ai essayé de le rendre aussi simple que possible. (3 écrans)

  • Se connecter à SQL Server
  • Sélectionnez des objets
  • Choisissez le dossier vers lequel exporter / importer

J'ai également - accidentellement - ajouté la possibilité de choisir sélectivement des objets individuels à importer - ou à exporter. Ce qui facilite grandement le développement.

J'apportais généralement une modification à une procédure stockée et à une table, puis j'exportais ces deux objets dans un répertoire GIT.

Ensuite, j'utilise Source Tree pour voir visuellement les changements, puis je les valide dans bitbucket si je suis content.


4
téléchargement gratuit - mais seulement pour 20 objets. Cette réponse n'est qu'une annonce pour votre produit.
Thronk

-1

Mon entreprise vient de développer ce nouvel outil ( gratuit ) qui vous aide à extraire facilement les scripts pour les bases de données SQL, peut faire des comparaisons , peut lancer WinMerge pour comparer rapidement les scripts à la base de données en direct, et peut également synchroniser les différences à la fois en mettant à jour les scripts ou en appliquant les changements à la base de données (sauf pour les tableaux, ce qui impliquerait plus de complexité et plus de risques).

Servantt est le WinMerge pour comparer les bases de données SQL Server aux scripts à version contrôlée.

Il soutient et encourage les meilleures pratiques dans le développement de logiciels:

  • Garder les objets Database sous contrôle de version (*)
  • Suppression des droits d'accès des développeurs sur les environnements de production
  • Examen par le DBA des modifications des procédures / vues pour les goulots d'étranglement des performances et les normes de dénomination
  • Nommer des objets en utilisant des identificateurs complets et des délimiteurs entre crochets (il corrige les scripts CREATE PROCEDURE / VIEW / FUNCTION / etc)

(*) Les scripts sont enregistrés dans un dossier local qui peut être une copie de travail de Git, Subversion, TFS, Source Safe ou tout autre VCS.

Téléchargement gratuit: http://servantt.com

La version professionnelle (qui est toujours en cours de développement) sera une bête complètement différente - elle vise l'automatisation du déploiement (gestion des versions), pour automatiser des tâches telles que la mise à jour d'IIS, la mise à jour des services Windows, etc.


Cet outil ne fonctionne pas.
Neeraj Kumar

@NeerajKumar il y a une adresse "contactez-nous" dans la page où vous pouvez décrire votre problème. Je serai ravi de vous aider. Il y a plus d'un millier d'utilisateurs actifs, je suppose que cela fonctionne dans un certain sens :-)
drizin
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.