SQL Server : accès à partir de linux
FreeTDS
Installation
FreeTDS fourni le protocole TDS (Tabular Data Stream) utilisé par SQLServer et Sybase. Il fourni également des outils en ligne de commande, ainsi qu'un driver ODBC mais ce dernier est limité. On lui préfèrera donc ceux d'UnixODBC (voir ci-dessous).
tdsodbc fourni /usr/lib/odbc/libtdsodbc.so et /usr/share/tdsodbc/odbcinst.ini
sudo apt-get install freetds-bin tdsodbc
Dépendances : freetds-common, libsybdb5.
Configuration
A la fin de /etc/freedts/freetds.conf, ajouter :
[SERVSQL]
host = servsql.regie.fr
port = 1433
tds version = 8.0
qui définit l'accès au serveur SQL Server, le port et la version
Test
tsql -S SERVSQL -U sa -P sa
avec :
-U : utilisateur SQL Server
-P : mot de passe
cette commande doit renvoyer (sans erreur) :
locale is "fr_FR.UTF-8"
locale charset is "UTF-8"
1>
On peut ensuite se connecter à une base :
1> use db1
2> go
1> select * from sysusers;
2> go
Noter les "GO" pour lancer les commandes. Taper "quit" pour quitter.
ODBC
Installation
sudo apt-get install unixodbc
fourni les drivers ODBC et l'outils d'interrogation isql
Voir la configuration d'ODBC, notamment où il cherche ses fichiers :
#odbcinst -j
unixODBC 2.2.14
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/user1/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
On utilisera donc /home/user1/.odbc.ini pour les "User DSN"
Configuration
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.so
Trace = No
FileUsage = 1
CPTimeout =
CPReuse =
Créer ~/.odbc.ini (équivalent du "User DSN". Si on veut un "System DSN", créer /etc/odbc.ini (sans le ".") -> voir "odbcinst -j")
[SERVSQL-DB1]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Trace = Yes
TraceFile = /tmp/odbc.ini.log
Server = 192.168.84.59
Port = 1433
Database = DB1
ATTENTION !!!!! : pas d'espaces devant les paramètres ! Sinon le test répondra "DSN not found".
Tester :
# isql -v SERVSQL-DB1 sa sa
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> select size,filename from sysfiles;
SQL>
Pour passer un script :
cat testmssql.sql | isql -v SERVSQL-DB1 sa sa
OU
isql -v SERVSQL-DB1 sa sa < testmssql.sql
Si tout fonctionne, on peut enlever les traces (Trace = no) dans les fichiers de config, et enlever le "-v" pour isql.