Problèmes de connexion FreeTDS
Je suis en utilisant FreeTDS 0,91 à se connecter à distance à un serveur MSSQL mais toutes les tentatives ont porté aucun fruit.
À faire un tsql commande sur mon Unix, j'obtiens l'erreur suivante:
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 20004 (severity 9)
Read from the server failed
OS error 104, "Connection reset by peer"
Error 20002 (severity 9)
Adaptive Server connection failed
There was a problem connecting to the server
La freetds.le journal est la suivante:
16:05:49.144905 20207 (log.c:196):Starting log file for FreeTDS 0.91
on 2011-09-28 16:05:49 with debug flags 0xffff.
16:05:49.145281 20207 (iconv.c:330):tds_iconv_open(0x3d29320, UTF-8)
16:05:49.145426 20207 (iconv.c:187):local name for ISO-8859-1 is ISO-8859-1
16:05:49.145448 20207 (iconv.c:187):local name for UTF-8 is UTF-8
16:05:49.145459 20207 (iconv.c:187):local name for UCS-2LE is UCS-2LE
16:05:49.145469 20207 (iconv.c:187):local name for UCS-2BE is UCS-2BE
16:05:49.145479 20207 (iconv.c:349):setting up conversions for client charset "UTF-8"
16:05:49.145489 20207 (iconv.c:351):preparing iconv for "UTF-8" "UCS-2LE" conversion
16:05:49.145508 20207 (iconv.c:391):preparing iconv for "ISO-8859-1" "UCS-2LE" conversion
16:05:49.145533 20207 (iconv.c:394):tds_iconv_open: done
16:05:49.145550 20207 (net.c:205):Connecting to 70.70.218.13 port 2600 (TDS version 7.0)
16:05:49.145686 20207 (net.c:270):tds_open_socket: connect(2) returned "Operation now in progress"
16:05:49.236008 20207 (net.c:310):tds_open_socket() succeeded
16:05:49.236061 20207 (util.c:156):Changed query state from DEAD to IDLE
16:05:49.236083 20207 (login.c:782):quietly sending TDS 7+ login packet
16:05:49.236173 20207 (token.c:328):tds_process_login_tokens()
16:05:49.857930 20207 (util.c:331):tdserror(0x3d29080, 0x3d29320, 20004, 104)
16:05:49.858072 20207 (util.c:361):tdserror: client library returned TDS_INT_CANCEL(2)
16:05:49.858090 20207 (util.c:384):tdserror: returning TDS_INT_CANCEL(2)
16:05:49.858114 20207 (util.c:156):Changed query state from IDLE to DEAD
16:05:49.858137 20207 (token.c:337):looking for login token, got 0()
16:05:49.858155 20207 (token.c:122):tds_process_default_tokens() marker is 0()
16:05:49.858168 20207 (token.c:125):leaving tds_process_default_tokens() connection dead
16:05:49.858179 20207 (login.c:466):login packet accepted
16:05:49.858189 20207 (util.c:331):tdserror(0x3d29080, 0x3d29320, 20002, 0)
16:05:49.858209 20207 (util.c:361):tdserror: client library returned TDS_INT_CANCEL(2)
16:05:49.858220 20207 (util.c:384):tdserror: returning TDS_INT_CANCEL(2)
16:05:49.858232 20207 (mem.c:615):tds_free_all_results()
Est-ce à tout semble que cela pourrait être un problème avec le serveur SQL server, ou suis-je installer ou avez configuré FreeTDS mal?
Perdus. S'il vous plaît aider.
Lorsque je me connecte au serveur via telnet, c'est la réponse que je reçois en retour:
Essayer 70.70.218.13...
Connecté à 70.70.218.13.
Caractère d'échappement '^]'.
^^
Connection closed by foreign host.
Serait-ce à dire que la connexion telnet à l'hôte a été couronnée de succès?
La base de données SQL est exécuté sur un serveur windows. Serait de la connexion au serveur de Windows (tout comme vous le feriez via le bureau à distance) le droit de tri de valeurs à utiliser pour le nom d'hôte et le port? Ou aurais-je à trouver un nom d'hôte pour le serveur SQL sur le serveur windows?
source d'informationauteur Kamran Khan
Vous devez vous connecter pour publier un commentaire.
Khan.
Je viens de rencontré cette même situation. Et j'ai résolu ce problème en ajoutant un .freetds.conf de ma maison,
Et je sais que c'est exactement la réponse à la plupart des FreeTDS problèmes de connexion.
Et cette méthode est également fourni par @Michael Berkowski.
Avec mes excuses pour les cinq ans de la nécromancie, il semble que cette erreur peut également se produire lorsque tsql se connecte avec succès à un port ouvert, mais l'auditeur est de certains services autres que les services SQL Server. Il semble FreeTDS ne pas essayer de vérifier si c'est de parler à un service autre que SQL Server lors de la connexion, de sorte que les messages d'erreur sont énigmatiques. (Dans mon cas, j'ai été en utilisant le numéro de port pour le Bureau à Distance.)
Si vous ne voulez pas créer de
.freetds.conf
vous pouvez simplement mettre leTDSVER
variable d'Environnement à la place (par exemple, sur Windows pour se connecter à SQL Server 2008, l'utilisation TDS version 7.3):(pour *nix utilisation
export
).Voir http://www.freetds.org/userguide/envvar.htm pour plus de variables d'environnement.
Voir http://www.freetds.org/userguide/choosingtdsprotocol.htm pour TDS versions de différents Sgbdr
Vous pouvez également spécifier un chemin d'accès d'un fichier journal qui peut fournir plus d'informations en définissant la variable d'environnement
TDSDUMP
qui va aider à résoudre les problèmes et de vous montrer où les fichiers de configuration sont recherchées. par exemple,Dans mon cas, le réglage de la TDSDUMP variable a révélé une erreur dans les logs:
Apparemment FreeTDS ne pas analyser le jeu de caractères du nom de la chaîne "CP1252;LC_CTYPE=English_United Unis.1252;LC_MONETARY=C;LC_NUMERIC=C;LC_TIME=C"
J'ai créé un
.freetds.conf
fichier avec le contenu suivant:Et enregistré à
C:\Windows\System32\config\systemprofile\AppData\Roaming\
comme suggéré par le fichier journal, qui a réglé le problème pour moi.