freeTDS n'utilisant pas sa configuration
j'ai décidé d'utiliser FreeTDS driver et unixODBC pour gérer la connexion AOP entre mon application basée sur LAMP avec une base de données distante MsSQL. malheureusement, il semble que le conducteur ne lit pas les freetds.conf file, ni les variables d'environnement définies soit directement via le CLI du serveur, soit spécifiées dans le fichier php par la fonction putenv ().
maintenant quelques données:
- comme je ping le serveur - Aucun paquet n'est perdu.
- comme je telnet le serveur sur le port 1433-le la connexion est établie
comme j'utilise la commande
TDSVER=7.0 tsql -H >IP< -p 1433 -U username
on me demande d'entrer le mot de passe et la connexion est établie.
sans TDSVER précédant la commande - la connexion échoue avec un message de ce type:
Error 20017 (severity 9): Unexpected EOF from the server OS error 115, "Operation now in progress" Error 20002 (severity 9): Adaptive Server connection failed There was a problem connecting to the server
le tsql -C commandes echos une telle sortie:
Compile-time settings (established with the "configure" script) Version: freetds v0.91 freetds.conf directory: /usr/local/etc MS db-lib source compatibility: yes Sybase binary compatibility: no Thread safety: yes iconv library: yes TDS version: 5.0 iODBC: no unixodbc: yes SSPI "trusted" logins: no Kerberos: no
freetds.conf à l'emplacement donné ci-dessus a ce entrée:
[MSSQL] host = >IP< port = 1433 tds version = 7.0
ISQL échoue également:
isql -v MSSQL [S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source [01000][unixODBC][FreeTDS][SQL Server]Adaptive Server connection failed [ISQL]ERROR: Could not SQLConnect
mon odbc.ini:
[MSSQL] Description = MS SQL Server Driver = FreeTDS TDS_Version = 7.0 Server = >IP< UID = username PWD = password ReadOnly = No Port = 1433
je suppose que la solution est vraiment simple, mais je suis trop stupide pour le trouver...
5 réponses
j'ai passé beaucoup de temps aujourd'hui à déboguer un problème similaire. J'avais mis "TDS version" dans freetds.conf mais il n'était pas utilisé dans ma connexion ODBC. Après avoir lu le code source freetds (connectparams.c:odbc_parse_connect_string), j'ai découvert que:
- si votre chaîne de connexion utilise "SERVER=" alors les deux freetds.conf et odbc.ini sont ignorés
- si votre chaîne de connexion utilise "SERVERNAME=" alors les paramètres dans les freetds appropriés.les serveurs de conf sont utilisé
- si votre chaîne de connexion utilise "DSN=" alors les paramètres dans l'odbc approprié.le DSN initial est utilisé
odbcinst.ini est un leurre. Les FreeTDS ne vérifient jamais les réglages.
Les paramètres que vous spécifiez dans la chaîne de connexion sont toujours respectés. Il respecte aussi toujours les variables d'environnement comme TDSVER.
Mon instinct ne vous avez besoin de changer votre TDS version = 7.0TDS version = 8.0 dans vos freetds.conf et odbc.les fichiers ini et vous avez besoin de quelque chose dans votre odbcinst.fichier ini. Voici ce que j'ai obtenu en travaillant sur un serveur Ubuntu 12.04 parlant à un serveur MSSQL distant:
freetds.conf
# Define a connection to the MSSQL server.
[mssql]
host = myserver
port = 1433
tds version = 8.0
odbc.ini
# Define a connection to the MSSQL server.
# The Description can be whatever we want it to be.
# The Driver value must match what we have defined in /etc/odbcinst.ini
# The Database name must be the name of the database this connection will connect to.
# The ServerName is the name we defined in /etc/freetds/freetds.conf
# The TDS_Version should match what we defined in /etc/freetds/freetds.conf
[mssql]
Description = MSSQL Server
Driver = freetds
Database = MyDB
ServerName = myserver
TDS_Version = 8.0
odbcinst.ini
# Define where to find the driver for the Free TDS connections.
[freetds]
Description = MS SQL database access with Free TDS
Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/i386-linux-gnu/odbc/libtdsS.so
UsageCount = 1
j'ai connu exactement le même problème, mais ma configuration était déjà correctement configurée. Le problème était que les versions TDS qui freetds.conf reconnaît a changé dans les nouvelles versions, mais apparemment les anciennes versions fonctionnent toujours dans la variable D'environnement TDSVER. Une fois que j'ai réglé la version dans les fichiers de configuration à 7.1 plutôt qu'à 8.0, tout a commencé à fonctionner.
l'initiale TDSVER=7.0
problème a été résolu par l'adjonction, à la fin de mon odbc.ini
fichier:
[Default]
Driver=/usr/local/lib/libtdsodbc.so
au lieu de vous connecter à une IP, essayez de vous connecter au nom de la section de configuration? Par exemple:
isql -v MSSQL