首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Linux连接到SQl服务器失败

从Linux连接到SQl服务器失败
EN

Stack Overflow用户
提问于 2013-02-27 10:50:23
回答 4查看 24.6K关注 0票数 4

我正在尝试连接到CentOS 5.8上的SQL Server2008。我使用的是unixODBC 2.3.0和SQL Server ODBC Driver (www.microsoft.com/en-us/download/details.aspx?id=28160).

当我尝试通过运行以下命令测试连接时:

代码语言:javascript
运行
复制
isql -v mydsn username password

它给了我:

代码语言:javascript
运行
复制
[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

端口已打开,服务器可访问。

我试图进一步诊断问题,但被困在这里:

代码语言:javascript
运行
复制
 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)

很明显,连接的建立出了问题。

有谁可以帮我?如果您需要任何其他信息,请告诉我。

谢谢

EN

回答 4

Stack Overflow用户

发布于 2013-03-19 01:38:33

当使用微软的linux驱动程序连接到微软的SQL Server时,当使用linux和odbc连接到微软的SQL server时,一个“陷阱”是服务器的odbc.ini中的字符串也必须包含端口。

代码语言:javascript
运行
复制
 Server = [protocol:]server[,port]

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

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

代码语言:javascript
运行
复制
odbcinst -j

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

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

票数 9
EN

Stack Overflow用户

发布于 2014-09-17 17:19:03

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

  1. telnet <1433>
  2. 转到SQL server网络设置
  3. 右键单击并打开configuration
  4. TCP/IP,然后在IPAll属性下的网络属性选项卡上将动态端口设置为空白,并将端口设置为1433
  5. Restart

SQL

  1. <IPAll>H216
票数 1
EN

Stack Overflow用户

发布于 2013-03-05 09:10:25

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15103331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档