7
votes

Comment rendre le nom du serveur dynamique dans un package SSIS

J'ai de nombreux packages SSIS qui se connectent tous à la même base de données. Je ne veux pas que le nom du serveur conserve le nom du serveur dans la connexion DB dans chaque base de données, car il est différent du Dev to Live Server. Et ces noms de serveur pourraient changer au fil du temps.

Je sais que vous pouvez le mettre dans un fichier de configuration, mais tous ces packages SSIS sont stockés dans SQL Server 2008 et je souhaite conserver tous les détails sur SQL Server.

Quelqu'un a-t-il des suggestions ou des conseils?

Je pensais à créer un package appelé getServerName qui renvoie le nom du serveur, que je pourrais utiliser pour modifier les connexions dans chaque package. Mais il pourrait y avoir une meilleure façon.


0 commentaires

5 Réponses :


1
votes

J'ai trouvé que le fichier de configuration est un moyen assez pratique d'y aller.

Si vous planifiez votre colis à exécuter à partir de SQL Server Agent, vous pouvez spécifier le fichier de configuration à utiliser à partir d'un chemin de fichier et s'occupe habituellement de toutes mes exigences de paramètre.

Si vous souhaitez conserver les résultats dans SQL Server, vous pouvez les stocker dans une table et les récupérer. Mais maintenant, vous devez savoir quel serveur / table à utiliser contre Dev / Test / Prod, et vous êtes de retour au problème initial.

Mon conseil: avoir un fichier de configuration dans le même emplacement physique sur tous les serveurs (dev / test / prod) et avoir le point de travail sur le fichier de configuration approprié pour les paramètres.


0 commentaires

3
votes

Je peuplie une variable avec le nom de serveur à partir d'une requête qui a le nom du serveur actif. Ensuite, dans une tâche de script, je modifie simplement la chaîne de connexion

Cet exemple est pour une excifile, mais il serait très similaire pour une connexion SQL P>

    Dts.Connections("ExcelConnection").ConnectionString = 
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\" +

 Dts.Variables("ActiveServerName").Value.ToString + "\Summary_" + 

Dts.Variables("FileDate").Value.ToString + 
".xls;Extended Properties=Excel 8.0;HDR=YES;"


1 commentaires

Cela fonctionne bien. Nous utilisons SSIS pour des charges de données spécialisées et que vous passez dans les informations de connexion de DB, car elle est unique à chaque installation client.



8
votes

Une très belle fonctionnalité en SSIS à résoudre simplement votre genre de problème est appelé configurations de package. Beaucoup de gens ont des opinions et / ou des idées différentes sur la manière d'aller à propos de vous stocker des propriétés dynamiques du serveur / des packages / des fichiers de configuration variables, des variables d'environnement, des entrées SQL Server ou des entrées de registre. Personnellement, j'aime stocker toutes les informations sur SQL Server, ce que vous voulez faire. Pour y parvenir, suivez les étapes de cet article: Étapes de configuration de package


0 commentaires

1
votes

En plus du fichier de configuration ...

Vous pouvez définir une variable pouvant être définie par la ligne de commande ou dans un travail de traitement par lots ou agent SQL Server. La variable peut être substituée dans le nom du serveur (par une expression, IIRC).

Ceci est utile pour si vous souhaitez un seul déploiement de fichier.

EDIT:

exemple : (Désolé, SQL Server Central nécessite une inscription)


0 commentaires

4
votes

Nous utilisons une table de configuration plutôt qu'un fichier. Vous commencez avec une variable d'environnement pour pointer vers la base de données avec la table de configuration, puis retirez toutes les autres configurations de là.

Voici un échantillon d'un script pour remplir une table de configuration (vous créeriez un script distinct pour Dev Server, QA Serveur, PROD SERVER: P>

--connections
--for MyDatabaseName
INSERT INTO MyDatabase.dbo.SSISConfig VALUES (
'MyConfigurationName', 'Data Source=MYSQLSERVER;Initial Catalog=MyDatabaseName;Provider=SQLNCLI10.1;Integrated Security=SSPI;Auto Translate=False;', 'Package.Connections[MyDatabaseName].Properties[ConnectionString]' , 'String' )

--variables
--FilePathImportServer
INSERT INTO MyDatabase.dbo.SSISConfig VALUES (
'MyConfigurationName', '\\MYSERVER\SOMECLIENT\Import\', '\Package.Variables[User::FilePathImportServer].Properties[Value]' , 'String' )

--select * from SSISConfig where configurationFilter = MyConfigurationName


0 commentaires