68 votes

Procédures stockées/schéma de base de données dans le contrôle de la source

Est-ce que vous gardez la trace des procédures stockées et des schémas de base de données dans le système de contrôle de source de votre choix ?

Lorsque vous effectuez une modification (ajout d'une table, mise à jour d'une procédure stockée), comment faites-vous entrer les modifications dans le contrôle de la source ?

Nous utilisons SQL Server au travail, et j'ai commencé à utiliser darcs pour le versioning, mais je serais curieux de connaître les stratégies générales ainsi que les outils pratiques.

Edit : Wow, merci pour toutes ces suggestions, les gars ! J'aimerais pouvoir sélectionner plus d'une "Réponse acceptée" !

43voto

Robert Paulson Points 10792

Nous choisissons de script tout, et cela inclut toutes les procédures stockées et les changements de schéma. Aucun outil wysiwyg, ni aucun programme de "synchronisation" fantaisiste n'est nécessaire.

Les modifications de schéma sont faciles, il suffit de créer et de maintenir un fichier unique pour cette version, comprenant toutes les modifications de schéma et de données. Cela devient votre script de conversion de la version x à x+1. Vous pouvez ensuite l'exécuter par rapport à une sauvegarde de production et l'intégrer dans votre " build quotidien " pour vérifier qu'il fonctionne sans erreur. Notez qu'il est important de ne pas modifier ou supprimer le schéma déjà écrit / le sql de chargement de données car vous pouvez finir par casser tout sql écrit plus tard.

-- change #1234
ALTER TABLE asdf ADD COLUMN MyNewID INT
GO

-- change #5678
ALTER TABLE asdf DROP COLUMN SomeOtherID
GO

Pour les procédures stockées, nous choisissons un seul fichier par sproc, et il utilise le formulaire drop/create. Toutes les procédures stockées sont recréées lors du déploiement. L'inconvénient est que si une modification a été effectuée en dehors du contrôle de la source, la modification est perdue. En même temps, c'est vrai pour tout code, mais vos DBA'a doivent en être conscients. Cela empêche vraiment les personnes extérieures à l'équipe de manipuler vos procédures stockées, car leurs modifications sont perdues lors d'une mise à niveau.

En utilisant Sql Server, la syntaxe ressemble à ceci :

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[usp_MyProc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [usp_MyProc]
GO

CREATE PROCEDURE [usp_MyProc]
(
    @UserID INT
)
AS

SET NOCOUNT ON

-- stored procedure logic.

SET NOCOUNT OFF

GO

La seule chose qui reste à faire est d'écrire un programme utilitaire qui rassemble tous les fichiers individuels et crée un nouveau fichier avec l'ensemble des mises à jour (comme un seul script). Faites-le en ajoutant d'abord les changements de schéma puis en récurant la structure du répertoire et en incluant tous les fichiers de procédures stockées.

L'avantage de tout scripter, c'est que vous deviendrez bien meilleur pour lire et écrire du SQL. Vous pouvez également rendre ce processus plus élaboré, mais il s'agit du format de base pour contrôler le code source de tout le SQL sans logiciel spécial.

addendum : Rick a raison de dire que vous perdrez les permissions sur les procédures stockées avec DROP/CREATE, donc vous pouvez avoir besoin d'écrire un autre script va réactiver les permissions spécifiques. Cette permission script serait la dernière à être exécutée. Notre expérience a révélé plus de problèmes avec la sémantique ALTER par rapport à DROP/CREATE. YMMV

8voto

Manu Points 10901

Créer un "projet de base de données" dans Visual Studio pour écrire et gérer votre code sQL et garder le projet sous contrôle de version avec le reste de votre solution.

8voto

japollock Points 864

La solution que nous utilisions dans mon dernier emploi consistait à numéroter les scripts au fur et à mesure qu'ils étaient ajoutés au contrôle de la source :

01.CreateUserTable.sql
02.PopulateUserTable
03.AlterUserTable.sql
04.CreateOrderTable.sql

L'idée était que nous savions toujours dans quel ordre exécuter les scripts, et que nous pouvions éviter de devoir gérer les problèmes d'intégrité des données qui pourraient survenir si vous essayiez de modifier le script #1 (ce qui ferait vraisemblablement échouer les INSERTs du #2).

5voto

Rick Points 1582

Une chose à garder à l'esprit avec vos scripts drop/create dans SQL Server est que les permissions au niveau des objets seront perdues. Nous avons modifié notre standard pour utiliser des scripts ALTER à la place, qui maintiennent ces permissions.

Il existe quelques autres réserves, comme le fait que l'abandon d'un objet supprime les enregistrements de dépendances utilisés par sp_depends, et que la création de l'objet ne crée que les dépendances pour cet objet. Ainsi, si vous supprimez/créez une vue, sp_depends n'aura plus connaissance d'aucun objet faisant référence à cette vue.

Morale de l'histoire, utilisez les scripts ALTER.

5voto

icelava Points 5655

Je suis d'accord avec (et upvote) la pratique de Robert Paulson. Cela suppose que vous soyez à la tête d'une équipe de développement ayant la responsabilité et la discipline nécessaires pour adhérer à une telle pratique.

Pour "imposer" cela à mes équipes, nos solutions maintiennent au moins un projet de base de données de Visual Studio Team Edition pour les professionnels des bases de données . Comme pour les autres projets de la solution, le projet de base de données bénéficie d'un contrôle de version. Il s'agit d'un processus de développement naturel qui consiste à décomposer tout ce qui se trouve dans la base de données en morceaux faciles à entretenir, ce qui permet de "discipliner" mon équipe tout au long du processus.

Bien sûr, s'agissant d'un projet Visual Studio, il est loin d'être parfait. Vous rencontrerez de nombreuses bizarreries qui peuvent vous frustrer ou vous déconcerter. Il est nécessaire de comprendre le fonctionnement du projet avant de pouvoir l'utiliser pour accomplir vos tâches. Voici quelques exemples

Mais pour les équipes qui n'ont pas l'habitude de versionner leurs objets de base de données, c'est un bon début. L'autre alternative célèbre est bien sûr, La suite de produits SQL Server de Red Gate que la plupart des personnes qui les utilisent considèrent comme supérieures à l'offre de Microsoft.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X