2

J'ai récemment commencé à travailler sur une application héritée qui a l'essentiel de sa logique métier dans les procédures stockées réparties sur deux ou trois bases de données SQL Server. Actuellement, tout le code est également édité dans l'environnement en direct.Comment configurer un environnement de développement pour les procédures stockées SQL Server?

Comme je suis nouveau à la base de code, je ne veux pas vraiment faire des changements dans l'environnement réel et donc je suis en train de mettre en place un environnement de développement. Nous utilisons Visual Studio pour écrire tous les objets de la base de données et suivre ceux de Subversion. Avec ce que je peux alors mettre en place une instance dev SQL Server pour travailler, mais un problème est que le code est plein de références codées en dur pour les noms de serveur et base de données, par exemple un grand nombre de procs stockées ressembler à quelque chose comme ce qui suit:

CREATE PROCEDURE server1.db1.dbo.proc1 AS 

INSERT INTO db1.dbo.table1 
EXEC server2.db2.dbo.proc2 

END 

Comment puis-je changer toutes ces références de manière sûre? Jusqu'ici j'ai pensé à deux options:

1) Avoir un script qui exécute une recherche globale et remplace les noms de serveur sur ma copie de travail de subversion et puis exécute ce code modifié contre mes bases de données de test.

2) Configurer un alias DNS sur ma boîte locale en modifiant mon fichier \ windows \ system32 \ drivers \ etc \ hosts qui redirige server1 et server2 vers les instances de développement des bases de données. Sur les serveurs de production, ceux-ci pointeraient alors vers les bases de données de production.

Lequel de ces est une meilleure configuration à votre avis? Voyez-vous des risques avec ou que j'ai négligés et qui devraient être pris en compte?

Répondre

4

Si toutes les références sont au serveur lié « Server2 » etc vous pouvez spécifier un autre SQL Server sous-jacente sur votre boîte de dev pour ce serveur lié

Vous pouvez faire l'une des:

+0

Merci. Cela semble fonctionner très bien et c'est exactement ce que je veux. Je pense que je vais configurer des noms de service basés sur les rôles fonctionnels des serveurs et les lierai ensuite aux noms de machines physiques appropriés. Cela facilitera également la migration dans un scénario de récupération d'urgence. – snth

1

La solution correcte semble être d'enlever toutes les références codées en dur au serveur de production, si possible (votre solution 1). Il est inhabituel de partager une base de données de serveur entre des environnements de production et de développement (à moins qu'il s'agisse d'une base de données séparée stockant par exemple uniquement des données statiques/de référence). Vous avez seulement besoin du serveur si vous faites un travail de serveur croix - comme par GBN, vous pouvez ajouter sp_addlinkedserver

La route Alias ​​DNS est dangereux. Si quelque chose échoue, vous allez mettre à jour les données de production de votre environnement de développement. Remarque: Si vous avez accès à un outil tel que Visual Studio DBPro, vous pouvez également utiliser des variables pour symboliser vos scripts. Par exemple: référence une table telle que $ (SERVER). $ (DATABASE) .dbo.Table Lorsque le projet est déployé, les valeurs d'environnement appropriées sont remplacées.

+0

Merci pour l'avertissement concernant les alias DNS. Je pensais la même chose en réalité. Votre solution de note de côté sonne comme le meilleur, mais malheureusement, il existe une multitude d'outils.Nous utilisons également les versions SQL Server 2000, 2005 et 2008, ce qui complique encore les choses. Cependant, j'ai juste essayé la méthode sp_addlinkedserver et cela semble marcher sur tout. – snth

Questions connexes