tdsodbc - Error "El servidor Adaptive no está disponible o no existe" al conectarse a SQL Server desde PHP
freetds ubuntu 17 (7)
Estoy intentando conectarme a una base de datos de SQL Server 2005 desde mi Mac usando unixODBC y FreeTDS como se describe here . Sin embargo, cuando intento conectarme a una base de datos diferente utilizando la misma configuración, obtengo:
Connection Failed:[FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist.
Aquí está mi configuración de freetds.conf:
[my_db]
host = 12.34.56.789
port = 1433
tds version = 8.0
Y aquí está mi odbc.ini:
[my_dsn]
Driver = /opt/local/lib/libtdsodbc.so
Description = My Database
Trace = no
Servername = my_db
Database = MyDB
[ODBC Data Sources]
my_dsn = FreeTDS
Todavía puedo conectarme a la otra base de datos que configuré en esta computadora (que se describe en la publicación de mi blog vinculada anteriormente), así que estoy bastante seguro de que el error no está en el extremo de Mac. He verificado en el servidor que estoy usando la dirección IP y el puerto correctos. ¿Alguna idea sobre cuál podría ser el problema y si está en el extremo del servidor?
Bud, desactive selinux o agregue lo siguiente a su servidor RedHat / CentOS:
setsebool -P httpd_can_network_connect_db 1
setsebool -P httpd_can_network_connect 1
Mejor siempre!
Después de innumerables horas de frustración logré que todo funcionara:
odbcinst.ini:
[FreeTDS]
Description = FreeTDS Driver v0.91
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
fileusage=1
dontdlclose=1
UsageCount=1
odbc.ini:
[test]
Driver = FreeTDS
Description = My Test Server
Trace = No
#TraceFile = /tmp/sql.log
ServerName = mssql
#Port = 1433
instance = SQLEXPRESS
Database = usedbname
TDS_Version = 4.2
FreeTDS.conf:
[mssql]
host = hostnameOrIP
instance = SQLEXPRESS
#Port = 1433
tds version = 4.2
Primera conexión de prueba ( mssql es un nombre de sección de freetds.conf ):
tsql -S mssql -U username -P password
Debe ver algunas configuraciones pero no hay errores y solo un indicador 1> . Use quit para salir.
Luego probemos DSN / FreeTDS ( prueba es un nombre de sección de odbc.ini ; -v significa verboso):
isql -v test username password -v
Debes ver el mensaje Conectado!
He encontrado un problema con el Firewall. Por lo tanto, asegúrese de que su IP esté en la lista blanca y que el firewall no bloquee su conexión. Puede comprobar la conectividad con:
tsql -H somehost.com -p 1433
En mi caso, la salida fue:
Error 20009 (severity 9):
Unable to connect: Adaptive Server is unavailable or does not exist
OS error 111, "Connection refused"
There was a problem connecting to the server
Parece que tienes un problema con tu fuente de datos dsn u odbc.
Intente omitir el dsn primero y conéctese usando:
TDSVER=8.0 tsql -S *serverIPAddress* -U *username* -P *password*
Si eso funciona, sabes que es un problema con tu dsn o con freetds usando tu dsn. Además, es posible que su versión tds no sea compatible con su servidor. Es posible que desee probar otras configuraciones de TDSVER (5.0, 7.0, 7.1).
Respondiendo porque esta respuesta surgió primero para la búsqueda cuando tenía el mismo problema:
[08S01] [unixODBC] [FreeTDS] [SQL Server] No se puede conectar: Adaptive Server no está disponible o no existe
Las instancias con nombre MSSQL deben configurarse correctamente sin configurar el puerto. (la documentación en la configuración de freetds dice que la instancia de conjunto o el puerto NO AMBOS)
freetds.conf
[Name]
host = Server.com
instance = instance_name
#port = port is found automatically, don''t define explicitly
tds version = 8.0
client charset = UTF-8
Y en odbc.ini solo porque puede configurar Puerto, NO cuando esté usando una instancia con nombre.
Tuve el mismo problema, mi problema era que el servidor de seguridad en el servidor no estaba abierto desde la dirección IP actual.
1. Ver información sobre el servidor SQL.
tsql -LH SERVER_IP_ADDRESS
locale is "C"
locale charset is "646"
ServerName TITAN
InstanceName MSSQLSERVER
IsClustered No
Version 8.00.194
tcp 1433
np //TITAN/pipe/sql/query
2. Establezca su freetds.conf
tsql -C
freetds.conf directory: /usr/local/etc
[TITAN]
host = SERVER_IP_ADDRESS
port = 1433
tds version = 7.2
3 prueba
tsql -S TITAN -U user -P password
O
''dsn'' => ''dblib:host=TITAN:1433;dbname=YOURDBNAME'',
Consulte también http://www.freetds.org/userguide/confirminstall.htm (Ejemplo 3-5).
Si recibe el mensaje 20009, recuerde que no se ha conectado a la máquina. Es un problema de configuración o de red, no un error de protocolo. Verifique que el servidor esté activo, tenga el nombre y la dirección IP que utiliza FreeTDS y escuche el puerto configurado.