Perl : connection à un serveur Microsoft SQL Server 2008 via ODBC sur CentOS 6.x

Bonjour,

perl_logoAujourd’hui nous allons voir un rapide tutoriel permettant de mettre en place les pré-requis permettant d’utiliser un script Perl pour se connecter à une base de données MSSQL 2008 ou 2012 via ODBC avec FreeTDS. Attention cela ne fonctionnera que pour des comptes « locaux » sur SQL server et non Windows.

En pré-requis il faudra bien évidemment connaître l’IP, le Port du serveur MSSQL ainsi que de disposer d’un compte utilisateur pouvait se connecter sur le server.

Dans un premier temps, il va falloir installer les pré-requis, pour cela, exécutez les commandes suivantes :

#cd /tmp
#wget http://pkgs.repoforge.org/perl-DBD-ODBC/perl-DBD-ODBC-1.23-1.el6.rf.x86_64.rpm
#rpm -ivh ftp://fr2.rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
#yum install freetds unixODBC unixODBC-devel
#yum install perl perl-DBI
#yum install perl-DBD-ODBC-1.23-1.el6.rf.x86_64.rpm

Une fois ces pré-requis installés, il faut créer un template pour installer le driver FreeTDS. Créez un fichier tds.driver.template et copiez cela :

[FreeTDS]
Driver = /usr/lib64/libtdsodbc.so.0

Vérifier que le fichier « libtdsodbc.so.0″ se trouve bien à cet endroit si besoins :

updatedb
locate libtdso

Installez ensuite le nouveau driver en utilisant le fichier récemment créé :

 #odbcinst -i -d -f tds.driver.template

Vous pouvez vérifiez que le nouveau driver est bien installé grâce à cette commande :

 #odbcinst -q -d
[PostgreSQL]
[MySQL]
[FreeTDS] <<<<<<<<
Enfin, on va créer le fichier de connexion « /etc/odbc.ini » dans lequel on met :

[MSSQL] 
Driver = FreeTDS
Address = $ADRESSE IP DU SERVER$
Port = 1433
TDS Version = 8.0
Database = $NOM DE LA BASE DE DONNEE$
Enfin on peut tester la connexion à la base de données grâce à cette commande :
 isql -v -s MSSQL SQLUSERNAME SQLUSERPASSWORD
Voici enfin un script qui vous permettra de lancer une requête et d’afficher le résultat. Attention de bien utilisé le DSN que vous avez renseigné dans le fichier « /etc/odbc.ini », dans le cas présent « MSSQL » :
#!/usr/bin/perl
use DBI;
use strict;
use DBI;
my @dsns = DBI->data_sources('ODBC');
foreach my $d (@dsns)
{
  print "$d n";
}
  my $dbh = DBI-> connect('dbi:ODBC:DSN=MSSQL;UID=SQLUSERNAME;PWD=SQLUSERPASSWORD') or die "CONNECT ERROR! :: $DBI::err $DBI::errstr $DBI::state $!n";
if ($dbh)
{
  print "There is a connectionn";
  my $sql = q/SELECT * FROM dbo.users/;
  my $sth = $dbh->prepare($sql);
  $sth->execute();
  my @row;
  while (@row = $sth->fetchrow_array) {  # retrieve one row at a time
    print join(", ", @row), "n";
  }
  $dbh->disconnect;
}
Si une information ne vous parait pas correct ou que vous souhaitez y apporter une précision. N’hésitez pas  à laisser un commentaire.
PS : J’ai utilisé ce post très complet pour réaliser ce tuto.  Je l’ai adapté pour aller à l’essentiel et pour être fonctionnel sur CentOS 6.X

Tags: , , , , , ,

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.