4

CentOS 5.8 で SQL Server 2008 に接続しようとしています。unixODBC 2.3.0 と SQL Server ODBC ドライバー (www.microsoft.com/en-us/download/details.aspx?id=28160) を使用しています。

実行して接続をテストしようとすると:

isql -v mydsn username password

それは私に与えました:

[S1T00][unixODBC][Microsoft][SQL Server Native Client 11.0]Login timeout expired
[08001][unixODBC][Microsoft][SQL Server Native Client 11.0]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
[08001][unixODBC][Microsoft][SQL Server Native Client 11.0]TCP Provider: Error code 0x2726
[ISQL]ERROR: Could not SQLConnect

ポートが開いていて、サーバーにアクセスできます。

問題をさらに診断しようとしましたが、ここで行き詰まりました:

 strace -e trace=network isql -v mydsn username password
socket(PF_FILE, SOCK_STREAM, 0)         = 3
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = -1 ENOENT (No such file or directory)
socket(PF_FILE, SOCK_STREAM, 0)         = 3
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = -1 ENOENT (No such file or directory)
socket(PF_FILE, SOCK_STREAM, 0)         = 3
connect(3, {sa_family=AF_FILE, path="/var/run/setrans/.setrans-unix"...}, 110) = 0
sendmsg(3, {msg_name(0)=NULL, msg_iov(5)=[{"\1\0\0\0", 4}, {"\1\0\0\0", 4}, {"\1\0\0\0", 4}, {"\0", 1}, {"\0", 1}], msg_controllen=0, msg_flags=0}, MSG_NOSIGNAL) = 14
socket(PF_FILE, SOCK_STREAM, 0)         = 4
connect(4, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = -1 ENOENT (No such file or directory)
socket(PF_FILE, SOCK_STREAM, 0)         = 4
connect(4, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = -1 ENOENT (No such file or directory)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)

どうやら、接続の確立に問題があるようです。

誰でも私を助けることができますか?他に情報が必要な場合はお知らせください。

ありがとう

4

4 に答える 4

9

Microsoft の Linux ドライバーを使用しているときに、Linux と odbc を使用して Microsoft の SQL Server に接続する場合の 1 つの問題は、サーバーの odbc.ini の文字列にポートも含まれている必要があることです。

 Server = [protocol:]server[,port]

http://msdn.microsoft.com/en-us/library/hh568455.aspxに従って これは、規則を使用する他のほとんどのセットアップとは異なる規則port = <portnumber>です。これが構成されていない場合、「Could not SQLConnect」エラーが表示されます。

また、正しい odbc ファイルが使用されていることを確認してください。

odbcinst -j

構成されたソースとその場所が表示されます。

後で遭遇するかもしれないもう 1 つの落とし穴は、SQL Server のドライバーが odbc.ini のユーザーとパスワードの情報がプレーン テキストの場合は無視することです。そのため、アプリケーションがそれを処理することを確認してください。

于 2013-03-18T17:38:33.413 に答える
1

問題をデバッグするには、次の手順を試してください。

  1. telnet <1433>
  2. SQL サーバーのネットワーク構成に移動します
  3. TCP/IP 設定
  4. 右クリックしてプロパティを開く
  5. [ネットワークのプロパティ] タブに切り替えます
  6. プロパティの下でIPAll、動的ポートを空白に設定し、ポートを1433
  7. SQL サービスを再起動します
于 2014-09-17T09:19:03.360 に答える
0

odbc トレースを開き、tcpdump を使用してネットワーク パッケージをキャッチできます。odbc トレースが役立つと思います。

于 2013-03-05T01:10:24.980 に答える
0

問題は、EL5 で EL6 ドライバーを使用していたことです。正しいバージョンをインストールした後、すべてが機能しました。とにかく、みんなの反応に感謝します。

于 2013-07-21T15:35:55.513 に答える