Base de données de gestion du changement - Configuration initiale pour créer des scripts, des scripts de migration ultérieure

StackOverflow https://stackoverflow.com/questions/2503696

Question

J'ai un changement de base de données processus de gestion en place. Il est basé sur des scripts SQL (donc, ce n'est pas une solution à base de code managé).

La configuration de base ressemble à ceci:

Initial/
    Generate Initial Schema.sql
    Generate Initial Required Data.sql
    Generate Initial Test Data.sql
Migration
     0001_MigrationScriptForChangeOne.sql
     0002_MigrationScriptForChangeTwo.sql
     ...

Le processus pour faire tourner une base de données consiste à exécuter alors tous les scripts Initlal, puis exécutez les scripts de migration séquentielle. Un outil prend cas des exigences de versioning, etc.

Ma question est, dans ce genre de configuration, est-il utile de maintenir aussi ceci:

Current/
    Stored Procedures/
        dbo.MyStoredProcedureCreateScript.sql
        ...
    Tables/
        dbo.MyTableCreateScript.sql
        ...
    ...

Par "cette" Je veux dire un répertoire des scripts (séparés par type d'objet) qui représente le créer des scripts pour faire tourner le courant / latest version de la base de données.

Pour une raison quelconque, je aime vraiment l'idée, mais je ne peux pas justifier concrètement il est nécessaire. Est-ce que je manque quelque chose?

Les avantages seraient:

  • Pour le contrôle de dev et la source, nous aurions la même configuration objet par fichier que nous sommes habitués à
  • Pour le déploiement, nous pouvons tourner une nouvelle instance DB à la dernière version en exécutant la Migrate initiale +, ou en exécutant les scripts de courant /
  • Pour dev, on n'a pas besoin d'une instance DB en cours d'exécution afin de faire du développement. Nous pouvons faire du développement « hors ligne » sur le / dossier actuel.

Les inconvénients seraient:

  • Pour chaque changement, nous devons mettre à jour les scripts dans le courant / dossier, ainsi que de créer un script de migration (dans la migration / dossier)

Merci d'avance pour toute entrée!

Était-ce utile?

La solution

En fait, c'est la meilleure façon. Aussi lourdes que cela puisse paraître, il vaut mieux que les alternatives à l'utilisation de SQL Comparer comme des outils ou VSDB déploiement de fichiers .schema. Je l'ai dit exactement l'approche smae depuis un certain temps: Version contrôle et votre de base de données. Mes applications déployer le schéma v1 à partir du script initial, puis exécutez la mise à niveau de script pour chaque version. Chaque script savoir comment passer de la version N-1 à N, et seulement cela. Le résultat final est la version actuelle.

Le plus grand est le manque retirer d'un fichier sql faisant autorité regarder trop pour trouver le actuellement version d'un objet (procédure, table, vue, etc.). Mais les avantages d'être en mesure de déployer votre application sur any version précédente, et l'avantage du déploiement par bien contrôlé et testé scripts l'emportent largement sur l'inconvénient.

Si vous vous sentez mal à l'aide de ce processus de déploiement (de script pour déployer v1 puis appliquer V1.1, puis v1.2 ... jusqu'à ce que finalement vous appliquez v4.5, en cours.) Garder alors cela à l'esprit: exactement la même processus est utilisé par SQL Server en interne pour mettre à jour la base de données entre les versions. Lorsque vous connectez une ancienne base de données, vous voyez la célèbre base de données est en cours d'exécution de la mise à niveau de la version 611-612 'et vous voyez que la mise à niveau va étape par étape , ne met pas droit à la version actuelle 651 ( ou tout ce qui est en cours dans votre cas). Pas plus que la mise à niveau exécute un outil de diff pour déployer v 651 sur v. 611. En effet, le meilleur approche est celle que vous venez d'utiliser, mettre à niveau une étape à à la fois.

Et pour ajouter une réponse réelle à votre question, après avoir affiché une diatribe plutôt oblique (Est-ce un sujet que j'ai des opinions bien arrêtées sur, pouvez-vous dire?): Je pense est utile d'avoir une version scénarisée de la version actuelle, mais Je pense que ce devrait être un livrable processus de construction d'intégration contiguë. En d'autres termes, votre serveur de build doit construire la base de données en cours (en utilisant les scripts de mise à niveau), puis, comme une étape de construction, le script sur la base de données et produire une chute de construction avec la version actuelle script de schéma. Mais ceux-ci devraient être utilisé comme référence pour la recherche et l'inspection de code, et non comme un livrable de déploiement, mon 2C.

Autres conseils

Je pense que ça va juste rendre les choses plus complexes à long terme. Les versions entières doivent vivre dans un seul script de sorte que vous pouvez tester ce script dans un contexte et savent qu'il fonctionne correctement dans un autre contexte comme la production.

Martin,

Si vous êtes dans le monde réel, votre base de données de production accepte uniquement les mises à jour - vous jamais « créer » à partir de zéro. Donc, la chose la plus importante pour vous stockerez, regarder, examiner, etc. est l'ensemble des scripts de mise à jour. Ce sont les scripts qui rendront à la production, de sorte que ce sont les seuls de réelle importance.

Vous faites la bonne chose en les primaires. Mais les développeurs doit être en mesure d'obtenir une « image courante » de ce que le schéma ressemble. CBM aiment cela aussi, bien (trop) souvent, ils le font en se connectant aux serveurs de production et mettre en marche une sorte d'outil IUG. (Beurk!)

La seule réserve que j'ai au sujet de votre approche est le schéma actuel / précédent par type d'objet . Ces scripts doivent être générés automatiquement, à partir de la base de données elle-même le dumping. Si vous pouvez automatiquement les classer par type, puis une grande! Sinon, faites ce que vous pouvez pour les rendre facile à naviguer, mais la règle de base devrait toujours être « généré automatiquement à partir d'une base de données en direct. »

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top