Configurer SAS/ACCESS Interface to SQL Server

Cet article montre comment configurer le module SAS/ACCESS interface to SQL Server sur un environnement Linux. Les chapitres sont les suivants :
  1. Modification du fichier sasenv_local pour positionner les variables d’environnement,
  2. Modification du fichier odbc.ini,
  3. Tester la connexion en dehors de SAS ( avec isql ),
  4. Tester la connexion dans une session SAS,
  5. Quelques erreurs courantes,
  6. Vérifier les variables d’environnement dans SAS,
  7. Quelques Usage Note
La connexion à une base SQL Server via le module SAS/ACCESS interface to SQL Server s'appuie sur un pilote ODBC fournit par SAS. Le pilote est disponible dans le répertoire install-sas/AccessClients/9.4/SQLServer/  datadirect-client-sql-server-pour-sas Voici les étapes à suivre pour configurer le module. Dans cet exemple je vais au plus simple. Des adaptations peuvent être nécessaire en fonction des spécificités de votre environnement.

Modification du fichier sasenv_local pour positionner les variables d'environnement

Ajoutez les variables suivante dans le fichier : export ODBCHOME=/opt/sas/install/AccessClients/9.4/SQLServer/ export ODBCINST=$ODBCHOME/odbcinst.ini export ODBCINI=$ODBCHOME/odbc.ini Il faut également enrichir le LD_LIBRARY_PATH : export LD_LIBRARY_PATH=$ODBCHOME:/opt/sas/install/AccessClients/9.4/SQLServer/lib/:$LD_LIBRARY_PATH Attention : Il est important de bien concaténer la variable avec $LD_LIBRARY_PATH

Modification du fichier odbc.ini

Modifier le fichier comme ci-dessous : [ODBC Data Sources] SQLServerWire=SAS Institute, Inc 7.1 SQL Server Wire Protocol [ODBC] IANAAppCodePage=4 InstallDir=/opt/sas/install/AccessClients/9.4/SQLServer/ Trace=0 TraceFile=odbctrace.out TraceDll=/opt/sas/install/AccessClients/9.4/SQLServer/lib/S0trc27.so [SQLServerWire] Driver=/opt/sas/install/AccessClients/9.4/SQLServer/lib/S0sqls27.so AnsiNPW=1 AuthenticationMethod=1 Database=sas EnableBulkLoad=0 EnableScrollableCursors=3 EnableQuotedIdentifiers=1 EncryptionMethod=0 FetchTSWTZasTimestamp=1 FetchTWFSasTime=0 GSSClient=native HostName=votre_serveur_sql_server LoginTimeout=15 LogonID= Password= PortNumber=1433 QueryTimeout=0

Tester la connexion en dehors de SAS ( avec isql )

Avant de tester la connexion dans SAS, je vous encourage à tester la connexion avec isql afin vous assurer que les variables d'environnement sont bien définis et votre fichier odbc.ini correctement renseigné. Vérifiez la présence des variables d'environnement dans votre session. L'idéal est de sourcer le fichier sasenv_local de SAS afin de simuler le fonctionnement dans SAS. (install/SASFoundation/9.4/bin/sasenv_local) env | grep ODBC datadirect-client-sql-server-pour-sas-check-variable-env Puis testez la connexion avec la commande ci-dessous : isql SQLServerWire UserSQL monpass -v datadirect-client-sql-server-pour-sas-test-avec-isql Si votre fichier odbc.ini est mal défini, vous pouvez obtenir l'erreur : [IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified Dans ce cas :
  1. Vérifiez la présence du fichier odbc.ini et que son path correspond à la variable d'environnement $ODBCINI
  2. Vérifiez bien la présence de votre DSN dans le fichier
Si votre $LD_LIBRARY_PATH est mal défini, vous pouvez obtenir l'erreur : [01000][unixODBC][Driver Manager]Can't open lib '/opt/sas/install/AccessClients/9.4/SQLServer/lib/S0sqls27.so' : file not found Une commande ls sur /opt/sas/install/AccessClients/9.4/SQLServer/lib/S0sqls27.so confirme pourtant la présence du fichier : datadirect-client-sql-server-pour-sas-check-fichier-du-pilote Dans ce cas :
  1. Vérifiez les droits du fichiers.
  2. Vérifier les librairies dynamiques :
ldd /opt/sas/install/AccessClients/9.4/SQLServer/lib/S0sqls27.so datadirect-client-sql-server-pour-sas-ldd-fichier-du-pilote Vous constatez l'anomalie suivante : datadirect-client-sql-server-pour-sas-ldd-fichier-du-pilote-erreur Le fichier libS0icu27.so se trouve dans AccessClients/9.4/SQLServer/lib/ Il faut donc vérifier la présence de AccessClients/9.4/SQLServer/lib/ la variable $LD_LIBRARY_PATH

Tester la connexion dans une session SAS

Pour tester et valider la connexion dans une session SAS, exécutez le code SAS suivant : libname test sqlsvr dsn="SQLServerWire" user="UserSQL " password="monpass"; Ce qui donne (si tout va bien) : datadirect-client-sql-server-pour-sas-test-libname Note : Le moteur est SQLSVR et non SQLSRV. Il s'agit d'une erreur courante. ( ERROR: The SQLSRV engine cannot be found )

Quelques erreurs courantes :

ERROR: The SAS/ACCESS Interface to SQLSRV cannot be loaded. The SASSQSRV code appendage could not be loaded. ERROR: Error in the LIBNAME statement. Le moteur SAS/ACCESS interface to SQL Server n'est pas installé. C'est à dire que le fichier sassqsrv est absent du répertoire /SASFoundation/9.4/sasexe . Il faut donc installer le composant. Pour plus d'information concernant l'installation d'un module SAS/ACCESS je vous invite à lire mon article Ajouter un produit SAS qui ne nécessite aucune configuration et ma vidéo  Installer un module SAS/ACCESS ERROR: CLI error trying to establish connection: [DataDirect][ODBC lib]Driver Manager Message file not found. Please check for the value of InstallDir in your odbc.ini. Dans ce cas vérifiez le contenu des propriétés [ODBC] de votre fichier odbc.ini : [ODBC] IANAAppCodePage=4 InstallDir=/opt/sas/install/AccessClients/9.4/SQLServer/ Trace=0 TraceFile=odbctrace.out TraceDll=/opt/sas/install/AccessClients/9.4/SQLServer/lib/S0trc27.so Vérifiez également les variables d'environnement (dans le fichier sasenv_local) ODBCHOME et ODBCINI ERROR: CLI error trying to establish connection: [unixODBC][Driver Manager]Can't open lib '/opt/sas/install/AccessClients/9.4/SQLServer/lib/S0sqls27.so' : file not found Vérifiez la présence de présence du path AccessClients/9.4/SQLServer/lib/ la variable $LD_LIBRARY_PATH ERROR: CLI error trying to establish connection: [DataDirect][ODBC lib] Data source name not found and no default driver specified ERROR: Error in the LIBNAME statement. Vérifiez si le dsn utilisé dans le libname existe bien dans votre fichier ODBC.ini ERROR: CLI error trying to establish connection: [SAS][ODBC SQL Server Wire Protocol driver][SQL Server]Login failed for user 'utilisateur'. ERROR: Error in the LIBNAME statement. Vérifiez que l'utilisateur utilisé dans le libname existe bien coté base de données SQL Server. Vérifiez également le mot de passe. Vous pouvez faire le test en dehors de SAS, via isql.

Vérifier les variables d’environnement dans SAS

Le code ci-dessous permet de vérifier votre configuration dans votre session SAS : %macro doit(command); filename p pipe &command lrecl=32767; data _null_; infile p; input; put _infile_; run; %mend; %put %quote(%sysget(LD_LIBRARY_PATH)); %put %quote(%sysget(ODBCINI)); %put %quote(%sysget(ODBCHOME)); %doit("ls -l $SASROOT/sasexe/sassqsrv"); %doit("ldd $SASROOT/sasexe/sassqsrv");

Quelques Usage Note et Problem Note

Usage Note 48348 : Utilisation de l'authentification NTLM avec l'interface SAS / ACCESS® avec Microsoft SQL Server Usage Note 41127 :  L'interface SAS / ACCESS® vers Microsoft SQL Server prend désormais en charge le chargement en bloc Problem Note 57069 : L'interface SAS / ACCESS® avec Microsoft SQL Server peut générer une erreur de "débordement du tampon de sortie" lorsque l'authentification Kerberos est utilisée - Correctif disponible. Problem Note 57757 :  L'utilisation de l'instruction UPDATE avec l'interface SAS/ACCESS® avec Microsoft SQL Server peut provoquer l'erreur  "A cursor with the name ... does not exist" Problem Note 53865 :  Une erreur "CLI execute error"  se produit dans l'interface AS/ACCESS® Interface to ODBC lorsque vous écrivez dans des tables Microsoft SQL Server contenant des champs DATETIME2 Lien court vers cet article : https://tinyurl.com/sas-access-to-sql-server

Nicolas Housset

Passionné d'informatique, je suis Consultant et expert technique SAS VIYA, également co-fondateur de la société Flexcelite. Spécialisé dans les technologies SAS (Viya, 9.4) et les infrastructures associées (Linux, Hadoop, Azure), ce blog est mon espace pour partager mes mémos techniques et retours d'expérience.