FreeTDS 0.91を使用してリモートMSSQLサーバーに接続していますが、これまでのところ、すべての試みは成果を上げていません。
Unixでtsqlコマンドを実行すると、次のエラーが発生します。
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
Freetds.logには、次のものが含まれています。
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()
これはSQLサーバーに問題があるように思われますか、それともFreeTDSをインストールしているか、構成が間違っていますか?
とても失われました。助けてください。
Telnet経由でサーバーに接続すると、次のような応答が返されます。
70.70.218.13を試して...
70.70.218.13に接続しました。
エスケープ文字は「^]」です。
^^
接続は外部ホストによって閉じられました。
これは、ホストへのTelnet接続が成功したことを意味しますか?
SQLデータベースはWindowsサーバーで実行されます。 (リモートデスクトップを介した場合と同じように)Windowsサーバーに接続することは、ホスト名とポートに使用する適切な種類の値でしょうか?または、Windowsサーバー上のSQLサーバーへの直接のホスト名を見つける必要がありますか?
氏族長。
私はちょうどこれと同じ状況に遭遇しました。そして、私の家に.freetds.confを追加することで、この問題を解決しました。
[global]
# TDS protocol version
tds version = 7.0
そして、これがほとんどのFreeTDS接続の問題に対する正確な答えであることを私は知っています。
また、このメソッドは@MichaelBerkowskiによっても提供されています。
5年間のネクロマンシーについてお詫び申し上げます。このエラーは、tsqlが開いているポートに正常に接続したときにも発生するようですが、リスナーはSQLServer以外のサービスです。 FreeTDSは、ログイン時にSQL Server以外のサービスと通信しているかどうかを確認しようとしないため、エラーメッセージはわかりにくいようです。 (私の場合、リモートデスクトップのポート番号を使用していました。)
.freetds.conf
を作成したくない場合は、代わりにTDSVER
環境変数を設定できます(たとえば、WindowsでSQL Server 2008に接続するには、TDSバージョン7.3を使用します)。
set TDSVER=7.3
(* nixの場合はexport
を使用します)。
その他の環境変数については、 http://www.freetds.org/userguide/envvar.htm を参照してください。
さまざまなRDBMSのTDSバージョンについては、 http://www.freetds.org/userguide/choosingtdsprotocol.htm を参照してください。
また、環境変数TDSDUMP
を設定することで、より多くの情報を提供できるログファイルのパスを指定できます。これは、問題のトラブルシューティングに役立ち、構成ファイルが検索される場所を示します。例えば.
set TDSDUMP=C:\temp\freetds.log
私の場合、TDSDUMP変数を設定すると、ログにエラーが表示されました。
iconv.c:346:setting up conversions for client charset "CP1252;LC_CTYPE=English_United States.1252;LC_MONETARY=C;LC_NUMERIC=C;LC_TIME=C"
iconv.c:348:preparing iconv for "CP1252;LC_CTYPE=English_United States.1252;LC_MONETARY=C;LC_NUMERIC=C;LC_TIME=C" <-> "UCS-2LE" conversion
iconv.c:423:tds_iconv_info_init: client charset name "-1" invalid
どうやらFreeTDSは文字列 "CP1252; LC_CTYPE = English_United States.1252; LC_MONETARY = C; LC_NUMERIC = C; LC_TIME = C"から文字セット名を解析しなかったようです
次の内容の.freetds.conf
ファイルを作成しました。
[global]
tds version = 7.3 # version 7.3 for MSSQL 2008
client charset = UTF-8 # so that we can get unicode characters
そして、ログファイルで提案されているようにそれをC:\Windows\System32\config\systemprofile\AppData\Roaming\
に保存しました。これにより、問題が修正されました。