Existe-t-il une alternative «pauvre» à RedGate pour la création de scripts sur l'ensemble du schéma de base de données? [fermé]

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

Question

Je suis dans une situation où je générerais un script pour une base de données que je pourrais exécuter sur un autre serveur et obtenir une base de données identique à celle d'origine, mais sans aucune donnée. En substance, je veux me retrouver avec un gros script de création qui capture le schéma de base de données.

Je travaille dans un environnement dans lequel SQL Server 2000 est installé et je ne parviens pas à installer les outils clients 2005 (au cas où ils vous aideraient). Je ne peux pas me permettre RedGate, mais j'aimerais vraiment avoir une base de données avec un schéma identique sur un autre serveur.

Des suggestions? Tous les outils .exe simples (sans installation requise), astuces ou astuces T-SQL seraient les bienvenus.

Mise à jour: La base de données sur laquelle je travaille compte plus de 200 tables et plusieurs relations et contraintes de clé étrangère. Par conséquent, la scriptation manuelle de chaque table et le collage du script ne sont pas une option viable. Je cherche quelque chose de mieux que cette solution manuelle

Mise à jour supplémentaire À moins que quelque chose ne me manque, ce n'est pas une solution viable avec les outils SQL 2000. Lorsque je sélectionne l'option pour générer un script de création sur une base de données. Je me retrouve avec un script contenant une commande CREATE DATABASE et ne créant aucun des objets - les tables, les contraintes, etc. Le studio de gestion de SQL 2005 peut également gérer les objets, mais la base de données se trouve dans un environnement sans moyen pour moi de connecter une installation de Management Studio à celle-ci.

Était-ce utile?

La solution

Exécutez SQL Server Management Studio, cliquez avec le bouton droit de la souris sur la base de données et sélectionnez Script Database en tant que > Créer pour > fichier

C'est pour SQL Server 2005. SQL Server 2000 Enterprise Manager a une commande similaire. Faites un clic droit sur la base de données > Toutes les tâches > Générer des scripts .

EDIT: dans SQL Server 2005, vous pouvez sélectionner "Base de données". dans le volet de l'explorateur d'objets et sélectionnez plusieurs bases de données dans le volet de détails. Cliquez ensuite avec le bouton droit de la souris sur votre sélection et sur "Base de données de scripts sous > Créer pour > fichier ". Cela les mettra tous dans un seul script et inclura toutes les tables, clés, procédures stockées et contraintes.

Autres conseils

Donc, je suppose que vous ne pouvez pas installer SQL Server Management Studio. Pas même la version gratuite. Si c'est une chose unique, j'installerais les outils de la porte rouge. La version d'essai est entièrement fonctionnelle pendant 14 jours. Faites votre travail, puis désinstallez. Vous pouvez également consulter http://www.xsqlsoftware.com/ , leurs fonctions sont similaires à celles de Red Gate. Si votre base de données est petite, ils ont une option gratuite pour vous. J'aime aussi http://www.apexsql.com/ . Utilisez l’essai de l’un d’eux et réessayez de convaincre votre patron d’en acheter un.

En plus des réponses ci-dessus, j'aimerais suggérer que (pour les projets futurs, au moins), vous ne disposiez pas de la conception de votre base de données principale dans la base de données elle-même.

Pour ce faire, vous pouvez simplement gérer vos tables de base de données, vos procédures, etc. sous la forme de scripts "CREATE" dès le premier jour, et concevoir un script maître qui rassemblera tous les scripts individuels en vue de leur déploiement dans la base de données de votre choix. .

Une solution plus sophistiquée consiste à utiliser quelque chose comme Visual Studio Database Edition (Probablement trop cher, si vos commentaires ont de quoi passer), ce qui vous permet de traiter chaque objet de base de données comme un noeud dans un projet, tout en permettant à l'ensemble chose à déployer en quelques clics.

L'explication de ces deux options est simplifiée à l'extrême, car il y a beaucoup d'autres problèmes - versioning, migration de données, etc. - mais le principe principal est le même.

Une fois que vous avez extrait votre script (en utilisant l'une des autres réponses), envisagez d'utiliser ce script comme base pour votre "maître".

Gardez simplement le "design" en dehors de la base de données - c'est uniquement pour les "implémentations".

Essayez de penser que le processus est similaire au développement du code: le code source et les fichiers binaires sont séparés, le dernier étant généré à partir du premier.

J'ai utilisé ce programme à partir de CodeProject avec succès. Non seulement le script utilise-t-il le schéma, il peut (éventuellement) l’enregistrement de toutes les instructions INSERT dont vous aurez besoin pour recréer la base de données.

Je l'ai déjà utilisé contre SQL Server 2000. Évidemment, si vous avez un million de lignes dans une table, il n’est peut-être pas judicieux d’en scripter le contenu, mais c’est un outil vraiment très pratique pour créer une série de scripts SQL permettant de répliquer une base de données.

S'il s'agit d'une opération ponctuelle et que vous ne souhaitez pas commander vous-même les scripts d'objet, il suffit de téléchargez une version d’essai gratuite de RedGate SQL Compare .

Il s’agit d’une version de travail complète de 14 jours, ce qui fera tout le travail pour vous - c’est une solution tout à fait légitime. Et vous aurez tous les scripts pour l'utilisation future avec votre script manuel. Quoi qu'il en soit, je suis à peu près sûr que si vous découvrez à quel point cet outil est pratique, vous l'achèterez plus tard et c'est ce qu'ils espèrent probablement en proposant un essai pleinement fonctionnel. Cela a fonctionné de cette manière dans mon cas.

Sachez simplement qu'une fois l'essai terminé, il affecte tous les outils. Veillez donc à en tirer le meilleur parti.

Michael Lang, lorsque vous cliquez avec le bouton droit de la souris sur la base de données et que vous choisissez de créer un script, vous devrez cliquer sur plusieurs cases d'option pour que tout soit généré. 2005 est beaucoup plus facile à cet égard, mais 2000 peut le faire, il vous suffit de sélectionner les options appropriées.

Si vous recherchez une version en ligne de commande, Le toolkit hébergement de serveurs SQL a déjà fonctionné pour moi.

Assistant de publication de base de données Microsoft (dans Visual Studio 2008).

Comme vous l'avez mentionné dans SQL Server 2000 , la commande à utiliser est la suivante:

Dans Enterprise Manager , sélectionnez la base de données à partir de laquelle vous souhaitez créer un script, puis cliquez avec le bouton droit de la souris et sélectionnez Toutes les tâches - > Générer des scripts SQL ...

Dans le volet Options , il est pratique de sélectionner l'option Créer un fichier par objet afin de pouvoir stocker chaque objet séparément dans le contrôle de source.

Ainsi, chaque fois que vous effectuez des mises à jour sur une tableA, vous pouvez l'extraire dans le contrôle de code source pour que les autres sachent que vous travaillez dessus. Une fois l'opération terminée, vous pouvez scripter cet objet et l'enregistrer.

Pour scripter un seul objet, vous pouvez utiliser la même option Toutes les tâches - > Générez des scripts SQL ... , puis sélectionnez uniquement cet objet.

Le seul problème avec cette approche est que lorsque vous souhaitez restaurer la base de données complète, vous devez vous occuper des objets dépendants, en ce sens que l'objet de niveau supérieur doit être restauré avant ceux qui en dépendent.

Ironiquement, lorsque vous écrivez la base de données entière dans un fichier, les objets ne sont pas classés en termes de dépendance, mais plutôt en fonction de la date de création. Cela entraîne des erreurs lorsque vous essayez de l’utiliser pour restaurer la base de données complète.

Nous avons fini par créer un fichier de commandes qui créerait chaque objet séparément en appelant "osql"

.

Et que tout a plutôt bien fonctionné à cette époque

Nous utilisons maintenant SQLCompare Pro pour nous protéger de ou Cela ne pose aucun problème, mais si vous ne publiez pas souvent, vous pouvez vous en passer.

Les autres sont corrects, mais pour créer une base de données complète à partir de rien, vous devez créer un "périphérique" en SQL avant d'exécuter les scripts de création de tables et de procédures ...

Utilisez ADODB, car à peu près toutes les (sinon toutes) boîtes Windows l'ont installé pour exécuter le script.

Bon sang, vous pouvez même écrire un vbScript qui s’exécute pour construire votre base de données entière. Quelles que soient vos tables de domaine, vous devez vous rappeler d'activer l'insertion d'identité avant d'ajouter les éléments à la base de données.

Je suis ouvert au partage de code source si vous en avez besoin. J'ai dû écrire la même chose il y a quelques années et j'ai fini avec 3 scripts, un qui a créé le périphérique, puis les tables, puis les procédures / déclencheurs et les données de domaine. J'ai écrit le code pour analyser le script par défaut et permettre à l'utilisateur de nommer sa propre base de données, ses identifiants de connexion, etc. Il est possible que vous n'ayez pas à aller aussi loin.

J'espère que cela vous aidera.

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