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

在使用 linux 和 odbc 连接到 Microsoft 的 SQL Server 并使用 Microsoft 的 linux 驱动程序时,一个“问题”是 odbc.ini 中服务器的字符串也必须包含端口。

 Server = [protocol:]server[,port]

根据http://msdn.microsoft.com/en-us/library/hh568455.aspx 这是与使用该约定的大多数其他设置不同的port = <portnumber>约定。如果未配置,您将看到“无法 SQLConnect”错误。

还要确保使用了正确的 odbc 文件。

odbcinst -j

将显示配置的源及其位置。

您稍后可能会遇到的另一个问题是,SQL Server 驱动程序会忽略 odbc.ini 中的用户和密码信息(如果它是纯文本),因此请确保您的应用程序能够处理这些信息。

于 2013-03-18T17:38:33.413 回答
1

要调试问题,请尝试以下步骤:

  1. 远程登录 <1433>
  2. 转到 SQL Server 网络配置
  3. TCP/IP 设置
  4. 右键单击并打开属性
  5. 切换到网络属性选项卡
  6. IPAll属性下将动态端口设置为空白并将端口设置为1433
  7. 重启 SQL 服务
于 2014-09-17T09:19:03.360 回答
0

问题是我将EL6驱动程序与EL5一起使用。安装正确的版本后,一切正常。感谢大家的回复。

于 2013-07-21T15:35:55.513 回答
0

您可以打开 odbc 跟踪并使用 tcpdump 捕获网络包。我认为 odbc 跟踪会提供帮助。

于 2013-03-05T01:10:24.980 回答