Cet article montre comment configurer le module SAS/ACCESS interface to SQL Server sur un environnement Linux. Les chapitres sont les suivants :
- Modification du fichier sasenv_local pour positionner les variables d’environnement,
- Modification du fichier odbc.ini,
- Tester la connexion en dehors de SAS ( avec isql ),
- Tester la connexion dans une session SAS,
- Quelques erreurs courantes,
- Vérifier les variables d’environnement dans SAS,
- 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/

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

Puis testez la connexion avec la commande ci-dessous :
isql SQLServerWire UserSQL monpass -v

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 :
- Vérifiez la présence du fichier odbc.ini et que son path correspond à la variable d'environnement $ODBCINI
- 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 :

Dans ce cas :
- Vérifiez les droits du fichiers.
- Vérifier les librairies dynamiques :
ldd /opt/sas/install/AccessClients/9.4/SQLServer/lib/S0sqls27.so

Vous constatez l'anomalie suivante :

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) :

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