web-dev-qa-db-fra.com

Erreur «Adaptive Server n'est pas disponible ou n'existe pas» lors de la connexion à SQL Server à partir de PHP

J'essaie de me connecter à une base de données SQL Server 2005 à partir de mon Mac en utilisant unixODBC et FreeTDS comme je l'ai indiqué ici . Cependant, lorsque j'essaie de me connecter à une autre base de données en utilisant la même configuration, j'obtiens:

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

Voici ma configuration freetds.conf:

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

Et voici mon 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

Je suis toujours en mesure de me connecter à l'autre base de données que j'ai configurée sur cet ordinateur (décrite dans mon blog ci-dessus), donc je suis presque sûr que l'erreur n'est pas du côté Mac. J'ai vérifié sur le serveur que j'utilise la bonne adresse IP et le bon port. Des réflexions sur ce qui pourrait être le problème, et si c'est du côté serveur?

36
wonder95

1. Voir les informations sur le serveur 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. Définissez votre freetds.conf

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

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

3 Essayez

tsql -S TITAN -U user -P password

OR

 'dsn' => 'dblib:Host=TITAN:1433;dbname=YOURDBNAME',

Voir aussi http://www.freetds.org/userguide/confirminstall.htm (exemple 3-5.)

Si vous obtenez le message 20009, n'oubliez pas que vous ne vous êtes pas connecté à la machine. C'est un problème de configuration ou de réseau, pas une défaillance de protocole. Vérifiez que le serveur est en place, a le nom et l'adresse IP que FreeTDS utilise et écoute le port configuré.

36

Il semble que vous ayez un problème avec votre source de données dsn ou odbc.

Essayez de contourner le DSN d'abord et connectez-vous en utilisant:

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

Si cela fonctionne, vous savez que c'est un problème avec votre dsn ou avec les freetds utilisant votre dsn. Il est également possible que votre version tds ne soit pas compatible avec votre serveur. Vous voudrez peut-être essayer d'autres paramètres TDSVER (5.0, 7.0, 7.1).

12
Jim Clouse

Après d'innombrables heures de frustration, j'ai réussi à faire fonctionner tout le monde:

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

Première connexion de test ( mssql est un nom de section de freetds.conf ) :

tsql -S mssql -U username -P password

Vous devez voir certains paramètres mais aucune erreur et seulement une invite 1>. Utilisez quitter pour quitter.

Alors testons DSN/FreeTDS ( test est un nom de section de odbc.ini ; -v signifie verbeux):

isql -v test username password -v

Vous devez voir le message Connecté!

9
Jan

J'ai eu le même problème, mon problème était que le pare-feu sur le serveur n'était pas ouvert à partir de l'adresse IP actuelle.

7
Rob Forrest

Répondre parce que cette réponse est venue en premier pour la recherche lorsque je rencontrais le même problème:

[08S01] [unixODBC] [FreeTDS] [SQL Server] Impossible de se connecter: Adaptive Server n'est pas disponible ou n'existe pas

Les instances nommées MSSQL doivent être configurées correctement sans définir le port. ( documentation sur la configuration freetds dit set instance or port NOT BOTH)

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

Et dans odbc.ini simplement parce que vous pouvez définir le port, NE FAITES PAS lorsque vous utilisez une instance nommée.

5
Naidim

J'ai trouvé un problème avec le pare-feu. Assurez-vous donc que votre adresse IP est sur la liste blanche et que le pare-feu ne bloque pas votre connexion. Vous pouvez vérifier la connectivité avec:

tsql -H somehost.com -p 1433

Dans mon cas, la sortie était:

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
2
Developer