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:

  1. comme je ping le serveur - Aucun paquet n'est perdu.
  2. comme je telnet le serveur sur le port 1433-le la connexion est établie
  3. 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.

  4. 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
    
  5. 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
    
  6. freetds.conf à l'emplacement donné ci-dessus a ce entrée:

    [MSSQL]
    host = >IP<
    port = 1433
    tds version = 7.0
    
  7. 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
    
  8. 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...

17
demandé sur khartvin 2012-10-25 14:35:45

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.

23
répondu Max Bolingbroke 2013-04-25 16:09:56

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
10
répondu Benny Hill 2012-10-25 13:35:03

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.

3
répondu jmsq 2013-03-07 15:25:44

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
1
répondu SCDomingos 2013-09-26 14:09:51

au lieu de vous connecter à une IP, essayez de vous connecter au nom de la section de configuration? Par exemple:

isql -v MSSQL
0
répondu Andomar 2012-10-25 10:43:56