2009-03-23 9 views
15

J'ai des bases de données SQL Server et y apporter des modifications. Certaines tables de base de données ont des enregistrements qui démarrent les enregistrements requis pour que mon application s'exécute. Je voudrais faire le contrôle de la version sur la base de données et ces enregistrements (lignes). Est-il possible de le faire et de le regrouper au contrôle de version SVN que j'ai pour mon code source ou existe-t-il d'autres solutions à cela? Je voudrais accomplir ceci pour pouvoir retourner à la version précédente de base de données et comparer des changements entre les révisions de base de données. Ce serait bien si les outils pour cela sont gratuits, open source ou pas très chers.Comment contrôler la version des bases de données SQL Server?

Mon environnement est Visual C# Express, SQL Server 2008 Express et Tortoise SVN.

+0

Dupe de http://stackoverflow.com/questions/173/how-do-i-version-my-ms-sql-database-in-svn? –

+0

Voir cette question: http://stackoverflow.com/questions/4952/database-version-control –

+0

Une astuce consiste à avoir un schéma de dénomination commun pour ces tables de sorte que le processus que vous utiliserez aura plus de facilité à identifier ceux qui procéder. J'ajoute "_LKP" (lookup) à la fin de toutes les tables où les données doivent rester en place. –

Répondre

3

Nous venons de commencer à faire ce qui suit sur certains de nos projets, et cela semble fonctionner plutôt bien, pour remplir des tables "statiques".

Nos scripts suivent un modèle dans lequel une table temporaire est construite et sont ensuite renseignés avec ce que nous voulons que la table réelle ressemble. Nous ne mettons ici que des valeurs lisibles par l'utilisateur (c'est-à-dire que nous n'incluons pas les colonnes IDENTITY/GUID). Le reste du script prend la table temporaire et exécute les instructions INSERT/UPDATE/DELETE appropriées pour que la table réelle ressemble à la table temporaire. Quand nous devons changer ces données "statiques", tout ce que nous avons à mettre à jour est la population de la table temporaire. Cela signifie que le DIFFing entre les versions fonctionne comme prévu et que les scripts de restauration sont aussi simples que d'obtenir une version précédente du contrôle source.

Les INSERT/UPDATE/DELETE ne doivent être écrits qu'une seule fois. En fait, nos scripts sont légèrement plus compliqués, et ont deux ensembles de validation exécutés avant les instructions DML réelles. Un ensemble valide les données de la table temporaire (c'est-à-dire que nous ne violerons aucune contrainte en essayant de faire ressembler la base de données à la table temporaire). Les autres valident la table temporaire et la base de données cible (c'est-à-dire que des clés étrangères sont disponibles).

0

Vous pouvez obtenir une version de SQL Management Studio pour SQL Server Express. Je crois que vous serez capable de l'utiliser pour produire des scripts du schéma de votre base de données. Je pense que cela vous laissera créer des scripts à la main pour insérer les enregistrements de départ.

Ensuite, placez tous les scripts dans le contrôle source, avec un script maître qui exécute les scripts individuels dans le bon ordre.

Vous pouvez exécuter des diffs en utilisant windiff (gratuit avec Visual Studio SDK), ou Beyond Compare est peu coûteux, et un excellent outil de diff/fusion/synchronisation.

0

MS Visual Studio Team Système pour les développeurs de base de données a des fonctionnalités pour générer facilement des scripts de création pour l'ensemble du schéma. Seul inconvénient est le coût!

Avez-vous envisagé d'utiliser SubSonic?

0

Vous devriez plutôt utiliser le versioning spécifique à la base de données.

http://msdn.microsoft.com/en-us/library/ms189050.aspx

Lorsque l'un des READ_COMMITTED_SNAPSHOT ou base de données ALLOW_SNAPSHOT_ISOLATION les options sont activées, des copies logiques (versions) sont maintenues pour toutes les données modifications effectuées dans la base de données . Chaque fois qu'une ligne est modifiée par une transaction spécifique, l'instance du moteur de base de données stocke une version de l'image précédemment validée de la ligne dans tempdb.Chaque version est marquée de la transaction numéro de séquence de la transaction qui a effectué la modification. Les versions des lignes modifiées sont chaînées à l'aide d'une liste de liens . La dernière valeur de ligne est toujours stockée dans la base de données en cours et chaînée aux lignes versionnées stockées dans tempdb.

1

Il existe un produit Microsoft gratuit appelé Database Publishing Wizard que vous pouvez utiliser pour créer un script pour l'ensemble de la base de données (schéma et données).

1

Pour les versions de base de données (schéma), nous utilisons des propriétés personnalisées qui sont ajoutées à la base de données lors de l'exécution du programme d'installation. . Le contenu de ces scripts est généré avec nos scripts de construction.

Le script pour définir les propriétés ressemble à ceci:

DECLARE @AssemblyDescription sysname 
SET @AssemblyDescription = N'DailyBuild_20090322.1' 

DECLARE @AssemblyFileVersion sysname 
SET @AssemblyFileVersion = N'0.9.3368.58294' 

-- The extended properties DatabaseDescription and DatabaseFileVersion contain the 
-- AssemblyDescription and AssemblyFileVersion of the build that was used for the 
-- database script that creates the database structure. 
-- 
-- The current value of these properties can be displayed with the following query: 
-- SELECT * FROM sys.extended_properties 

IF EXISTS (SELECT * FROM sys.extended_properties WHERE class_desc = 'DATABASE' AND name = N'DatabaseDescription') 
BEGIN 
    EXEC sys.sp_updateextendedproperty @name = N'DatabaseDescription', @value = @AssemblyDescription 
END 
ELSE 
BEGIN 
    EXEC sys.sp_addextendedproperty @name = N'DatabaseDescription', @value = @AssemblyDescription 
END 

IF EXISTS (SELECT * FROM sys.extended_properties WHERE class_desc = 'DATABASE' AND name = N'DatabaseFileVersion') 
BEGIN 
    EXEC sys.sp_updateextendedproperty @name = N'DatabaseFileVersion', @value = @AssemblyFileVersion 
END 
ELSE 
BEGIN 
    EXEC sys.sp_addextendedproperty @name = N'DatabaseFileVersion', @value = @AssemblyFileVersion 
END 
GO 
0

J'utilise bcp pour cette (en vrac utilitaire de chargement, une partie d'une norme SQL Server installation, Express Edition inclus).

Chaque table avec des données a besoin d'un fichier de contrôle Table.ctl et d'un fichier de données Table.csv (il s'agit de fichiers texte pouvant être générés à partir d'une base de données existante en utilisant bcp). En tant que fichiers texte, ceux-ci peuvent très facilement être versionnés.

Dans le cadre de mes lots de génération (voir my answer there pour plus d'informations), j'itérer tous les fichiers de contrôle comme celui-ci:

SET BASE_NAME=MyDatabaseName 
SET CONNECT_STRING=.\SQLEXPRESS 

FOR /R %%i IN (.) DO (
    FOR %%j IN ("%%~fi\*.ctl") DO (
    ECHO + %%~nj 
    bcp %BASE_NAME%..%%~nj in "%%~dpsj%%~nj.csv" -T -E -S %CONNECT_STRING% -f "%%~dpsj%%~nj.ctl" >"%TMP%\%%~nj.log" 
    IF %ERRORLEVEL% GTR 0 (
     TYPE "%TMP%\%%~nj.log" 
     GOTO ERROR_USAGE 
    ) 
) 
) 

Une limitation de courant de ce script est que le nom du fichier doit être nom de la table, ce qui peut ne pas être possible si le nom de la table contient des caractères spéciaux spécifiques.

2

La prise en charge des données statiques est en cours d'ajout à SQL Source Control 2.0, actuellement disponible en version bêta. Plus d'informations sur la façon d'essayer cela peut être trouvé ici:

http://www.red-gate.com/messageboard/viewtopic.php?t=12298

+0

Juste une note pour vous faire savoir que SQL Source Control v2 est maintenant disponible avec support de données statiques. –

0

Ce project a un bon exemple de Déployez et rollback

4

réponse tardive mais nous espérons utile à d'autres lecteurs

je peux suggérer en utilisant le complément SSMS appelé ApexSQL Source Control. En utilisant ce complément, les développeurs peuvent facilement mapper des objets de base de données avec le système de contrôle de source via l'assistant directement à partir de SSMS. Il inclut la prise en charge de Git, TFS, Mercurial, Subversion, TFS (y compris Visual Studio Online) et d'autres systèmes de contrôle de source. Il inclut également la prise en charge des données statiques contrôlant la source (vous pouvez également contrôler les enregistrements de contrôle de version). Après le téléchargement et l'installation d'ApexSQL Source Control, il vous suffit de cliquer avec le bouton droit sur la base de données à contrôler et de naviguer dans le sous-menu ApexSQL Source Control dans SSMS. Cliquez sur l'option « base de données Lien vers contrôle de source » et sélectionnez le système de contrôle de code source et le modèle de développement de base de données, par exemple:

enter image description here

Après cela, vous pouvez exclure des objets que vous ne voulez pas être lié à contrôle de la source.Il est possible d'exclure des objets spécifiques par propriétaire ou par type.

Sur la prochaine étape, vous serez invité à fournir les informations de connexion dans le système de gestion de contrôle de code source:

enter image description here

Une fois fait, cliquez sur le bouton « Terminer » et « action La fenêtre "center" sera affichée, offrant les objets qui seront validés dans le dépôt (c'est par défaut, si le référentiel est vide). Une fois que la base de données a été liée au contrôle de source, toutes les opérations pouvant être exécutées à partir d'un client de contrôle source seront disponibles dans le volet "Explorateur d'objets". Ceux-ci incluent:

  • vérifier avec ou sans verrouiller les objets versionnés
  • voir l'historique de cet objet et d'appliquer la révision spécifique,
  • vue change sur cet objet qui ont été faites et
  • données de lieu de table pour le contrôle des sources en utilisant le « lien données statiques »

Vous pouvez lire cet article pour plus d'informations: http://solutioncenter.apexsql.com/sql-source-control-reduce-database-development-time/

Questions connexes