2011-12-14 55 views
23

Estoy intentando conectarme a una base de datos de SQL Server 2005 desde mi Mac usando unixODBC y FreeTDS como describí en here. Sin embargo, cuando intento conectar a una base de datos diferente utilizando la misma configuración, me sale:"Adaptive Server no está disponible o no existe" error al conectar con SQL Server desde PHP

Connection Failed:[FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist. 

Aquí está mi configuración freetds.conf:

[my_db] 
host = 12.34.56.789 
port = 1433 
tds version = 8.0 

Y aquí es 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 soy capaz de conectar con el otro DB I fijó en este equipo (descrito en mi blog vinculado anteriormente), así que estoy bastante seguro de que el error no está en el extremo 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?

+0

encontré los siguientes archivos ini. ¿Cuál usaría? './root/php/freetds-0.91/samples/odbc.ini ./usr/local/unixODBC/etc/odbc.ini ./usr/local/etc/odbc.ini ./usr/share/doc /freetds-devel-0.64/samples/odbc.ini ./etc/php.d/odbc.ini ./etc/odbc.ini ./var/tmp/php-5.2.6-2-root-root /etc/php.d/odbc.ini ' – shorif2000

+1

No puedo encontrar' libtdsodbc.so' en ninguna parte usando el comando 'find'. Estoy usando centos 5 – shorif2000

Respuesta

9

Parece que tiene un problema con su fuente de datos dsn u odbc.

intente omitir el DSN primera y conectar usando:

TDSVER=8.0 tsql -S *serverIPAddress* -U *username* -P *password* 

Si funciona, sabes que es un problema con su DSN o con freetds utilizando su DSN. Además, es posible que su versión de tds no sea compatible con su servidor. Es posible que desee probar otras configuraciones de TDSVER (5.0, 7.0, 7.1).

+1

'TDSVER = 8.0 tsql -S * direcciónIP del servidor * -U * nombre de usuario * -P * contraseña *' esto funciona para mí, pero en freetds no importa – shorif2000

4

responder debido a esta respuesta se acercó por primera vez para la búsqueda cuando estaba teniendo el mismo problema: [08S01] [unixODBC] [FreeTDS] [SQL Server] No se puede conectar: ​​SQL Server no está disponible o no existe

Las instancias nombradas de MSSQL deben configurarse correctamente sin configurar el puerto. (http://freetds.schemamania.org/userguide/freetdsconf.htm dice instancia conjunto o 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 sólo porque se puede establecer puerto, NO cuando se utiliza una instancia con nombre.

+1

http://freetds.schemamania.org/userguide/ freetdsconf.htm ya no funciona – Jan

4

Tuve el mismo problema, mi problema era que el firewall en el servidor no estaba abierto desde la dirección IP actual.

24

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. Indica tu freetds.conf

tsql -C  
freetds.conf directory: /usr/local/etc 

[TITAN] 
host = SERVER_IP_ADDRESS 
port = 1433 
tds version = 7.2 

3 Trate

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 una falla de protocolo. Verifique que el servidor esté activo, tenga el nombre y la dirección IP que usa FreeTDS, y escuche el puerto configurado.

+2

Gracias por esto, necesitaba especificar el puerto ('ip: port' para pymssql) y el comando LH me permitía encontrarlo fácilmente. – Adversus

+0

Si tsql -LH no da salida, ¿cuál es el próximo paso que se debe tomar? – brad

+0

¿Está 'SERVER_IP_ADDRESS' mal? Prueba ping a esta IP –

-5

Bud, deshabilitar SELinux o añadir lo siguiente a su servidor RedHat/CentOS:

setsebool -P httpd_can_network_connect_db 1 
setsebool -P httpd_can_network_connect 1 

mejor siempre!

6

Después de incontables horas de frustración me las arreglé para conseguir todo de trabajo:

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 

conexión Primera prueba (mssql es un nombre de sección de freetds.conf):

tsql -S mssql -U username -P password 

que hay que ver algunos ajustes, pero no hay errores, y sólo un símbolo del 1>. Use salga de para salir.

A continuación, vamos a probar DSN/FreeTDS (prueba es un nombre de sección de odbc.ini; -v significa detallado):

isql -v test username password -v 

Debe ver el mensaje Conectado!

Cuestiones relacionadas