mars
2008
Bon bon bon ! Je perds mes bonnes habitudes, ça fait un bail que je n’ai rien posté sur ce blog !! Atelons nous à la tâche…
Aujourd’hui : Serveurs liés !!!
Les serveurs liés (linked servers) sont des serveurs de bases de données que nous lions à notre instance. Ainsi, nous pouvons exécuter des requêtes sur ces serveurs comme si les tables étaient dans notre instance.
La particularité de tout cela est que les serveurs « liables » peuvent être des serveurs MS Sql 2k ou 2k5, mais aussi toute source de données ayant un pilote OLE DB !!! Oracle, MySql, Access, Excel, etc. Tous ces serveurs peuvent être liés à notre instance Sql Server 2k5.
L’utilité évidente, surtout en Data Warehousing, est la possibilité de transférer de gros volumes de données sans intermédiaires, donc plus rapidement. Mes expériences, et celles de mes collègues et amis, montrent qu’il est en effet plus rapide de transférer des données avec cette méthode qu’avec une autre (pas d’ecriture de script d’ETL, pas de contraintes de transformation ANSI-UTF, …).
Comment lier un serveur ?
C’est aussi simple qu’une commande T-SQL ! La voici :
[ , [ @provider= ] 'provider_name' ]
[ , [ @datasrc= ] 'data_source' ]
[ , [ @location= ] 'location' ]
[ , [ @provstr= ] 'provider_string' ]
[ , [ @catalog= ] 'catalog' ]
Les paramètres sont claires : un nom pour votre serveur lié (@server), un nom de produit pour la source de données (je pense que c’est utilisé que dans le cas de liaison de serveurs MS SQL), @datasrc la source de données en tant que tel (le nom de l’instance SQL Server ou le chemin vers votre fichiers Excel par exemple), @location qui fait je ne sais quoi :p (je ne l’ai jamais vu utilisée), @provstr est le nom du pilote OLE DB que vous utilisez et @catalog qui définit le catalog utilisé (la base de données).
Il y’a plein d’exemples sur la documentation officielle, ainsi que les différents pilotes OLE DB disponibles (vous pouvez les consulter aussi dans SSMS), voici le lien :
http://msdn2.microsoft.com/fr-fr/library/ms190479.aspx
Nous allons tout de même faire un exemple tout simple :
go
execute sp_addlinkedserver 'baseAccess', 'Jet OLE DB', 'Microsoft.Jet.OLEDB.4.0',
'C:\Documents and Settings\Yazid Grim\Mes documents\linked.mdb'
go
Ce code ajoute un serveur lié, qui en fait une base de données Access toute simple.
Testons notre connection en faisant une requête sur cette base via SSMS. Le select est tout simple, le voici :
Pour peu que votre base Access contienne une table « Personne » avec des information à l’intérieur, vous verrez le résultat sur votre SSMS !!!! C’est pas beau tout ça !
Autre petit exemple pour la route, lier un fichier Excel :
'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'c:\MyData\DistExcl.xls',
NULL,
'Excel 5.0'
GO
Aussi simple que ça
Une petite astuce pour la route : la procédure stockée sp_tables_ex permet de lister les tables d’un serveur lié, dans le cas ou vous ne connaiteriez pas la structure de la base liée (ou la liste des onglets d’un fichier excel).
go
Ce code me donne la liste des tables de ma base Access
C’est tout pour les serveurs liés !