Déplacer une arborescence de packages SSIS entre serveurs

Le problème que j’ai rencontré aujourd’hui, c’est : “comment migrer tout un projet SSIS d’un serveur à un autre”.

Je suis en SQL Server 2008 R2 et donc je ne bénéficie pas de la notion de « projet » dans le catalogue SSIS. J’ai donc plus de 200 packages répartis dans une arborescence à déplacer.

Ces packages ont été déployés tout au long de la vie du projet et en tant qu’admin, je ne souhaite pas solliciter l’équipe de développement pour me packager un script de livraison qui reprendrait tous les packages.
Après tout, le changement d’un serveur pour un autre, c’est une opération de DBA, pas de développeur donc je dois trouver une solution.

Il y a un utilitaire fourni avec SQL Server qui permet de manipuler des packages : DTUTIL.exe

Il permet de batcher des opérations sur un catalogue SSIS (2008 / 2008R2) donc cela semble une bonne piste.

Pour déplacer un package, la ligne de commande ressemble à cela :

dtutil /sql \chemin\package /SourceServer SERVSOURCE /copy SQL;\ chemin\package /DestServer SERVDEST

Le problème, c’est qu’il faut que j’écrive plus de 200 fois cette ligne de commande, avec les bons chemins.

Comme je suis faignant, je vais passer par les méta-données de MSDB et en particulier avec les tables sysssispackages et sysssispackagefolders.

Il va falloir faire du hiérarchique pour reconstruire l’arborescence, pour cela, un bonne CTE des familles (cc Philippe).

Voici le script :

;with PackagesHierarchy(folderId, ParentFolderId, FolderPath) as 
(
  select folderid, cast(null as uniqueidentifier), 
    cast('\'+foldername as varchar(max)) as FolderPath       
  from sysssispackagefolders
  where foldername = 'ProjectFolder'

  union all
  
  select sysssispackagefolders.folderid, sysssispackagefolders.parentfolderid,
   CAST(PackagesHierarchy.FolderPath +'\'+ sysssispackagefolders.foldername as varchar(max)) as FolderPath
  From sysssispackagefolders
  Inner Join PackagesHierarchy
    on sysssispackagefolders.parentfolderid = PackagesHierarchy.folderid 
)

Select 'dtutil /sql ' + FolderPath + '\' + name + ' /SourceServer ServSRC /copy SQL;' + FolderPath + '\' + name + ' /DestServer ServDEST'
From sysssispackages
Inner Join PackagesHierarchy
  On PackagesHierarchy.folderId = sysssispackages.folderid

Vous copiez tout cela dans un fichier BAT et let’s go !

Conclusion

Certains diront qu’il est préférable de déployer en mode Fichier. Moi, je ne prends pas parti Clignement d'œil

Enjoy.

2 réflexions sur “Déplacer une arborescence de packages SSIS entre serveurs

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s