sql-server - instalar - odbc ini sql server linux
FreeTDS no usa su configuraciĆ³n (5)
Decidí usar el controlador FreeTDS y unixODBC para administrar la conexión PDO entre mi aplicación basada en LAMP con una base de datos MsSQL remota. desafortunadamente, parece que el controlador no lee el archivo freetds.conf, ni las variables de entorno establecidas directamente a través de la CLI del servidor o especificadas en el archivo php por la función putenv ().
ahora algunos datos:
- Al hacer ping al servidor, no se pierden paquetes.
- Cuando telnet el servidor en el puerto 1433, se establece la conexión
como yo uso el comando
TDSVER=7.0 tsql -H >IP< -p 1433 -U username
Me piden que introduzca la contraseña y se establece la conexión.
sin el TDSVER que precede al comando, la conexión falla con tal mensaje:
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
Los comandos tsql -C hacen eco de tal salida:
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 en la ubicación dada arriba tiene esta entrada:
[MSSQL] host = >IP< port = 1433 tds version = 7.0
el ISQL también falla:
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
mi odbc.ini:
[MSSQL] Description = MS SQL Server Driver = FreeTDS TDS_Version = 7.0 Server = >IP< UID = username PWD = password ReadOnly = No Port = 1433
Supongo que la solución es realmente simple, pero soy demasiado estúpido para encontrarla ...
El problema inicial de TDSVER=7.0
se resolvió agregando lo siguiente al final de mi archivo odbc.ini
:
[Default]
Driver=/usr/local/lib/libtdsodbc.so
En lugar de conectarse a una IP, intente conectarse al nombre de la sección de configuración? Por ejemplo:
isql -v MSSQL
Experimenté este mismo problema, pero mi configuración ya estaba configurada correctamente. El problema fue que las versiones de TDS que reconoce freetds.conf han cambiado en las versiones más nuevas, pero aparentemente las versiones anteriores aún funcionan en la variable de entorno TDSVER. Una vez que configuré la versión en los archivos de configuración en 7.1 en lugar de 8.0, todo comenzó a funcionar.
Mi instinto es que necesita cambiar su versión de tds = 7.0 a la versión de tds = 8.0 en sus archivos freetds.conf y odbc.ini Y necesita algo en su archivo odbcinst.ini. Esto es lo que tengo trabajando en un servidor Ubuntu 12.04 hablando con un servidor MSSQL remoto:
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
Pasé mucho tiempo hoy depurando un problema similar. Había establecido la "versión TDS" en freetds.conf pero no estaba siendo utilizada en mi conexión ODBC. Después de leer el código fuente de freetds (connectparams.c: odbc_parse_connect_string) descubrí que:
- Si la cadena de conexión utiliza "SERVER =", se ignoran tanto freetds.conf como odbc.ini
- Si la cadena de conexión utiliza "SERVERNAME =", se utilizan las configuraciones en el servidor freetds.conf apropiado
- Si la cadena de conexión usa "DSN =", entonces se usan las configuraciones en el DSN odbc.ini apropiado
odbcinst.ini es una pista falsa. FreeTDS nunca comprueba eso para la configuración.
Los ajustes que especifique en la cadena de conexión siempre se respetarán. También siempre respeta las variables de entorno como TDSVER.