Windows 2003 ODBC 问题 - 错误 10055

Windows 2003 ODBC 问题 - 错误 10055

使用数据集成器进行 ETL 将数据从 DB2 拉到 SQL Server,一段时间后,会出现以下 odbc 错误:

通信链路失败。comm rc=10055 - CWBCO1003 - 套接字错误,函数返回 10055

在此之后,无法对 ODBC 做任何事情,必须重新启动机器,目前我们每天晚上午夜都会重新启动机器,以尽量避免问题的发生。

试过这个,http://support.microsoft.com/kb/196271 但它并不起作用,几乎使情况变得更糟。

似乎目前还没有解决方案。我们使用的其他使用 ODBC 的盒子都没有遇到这个问题。目前无法重新格式化盒子,上面有遗留的东西。

有谁见过、遇到过、修复过或缓解过这个问题吗?

答案1

肯定是内存不足的情况,可能是由于不关闭数据库连接这一极为常见的错误造成的。我的建议是:

  1. 检查进程运行时可用的非分页池内存量。很有可能它会稳步减少,直到机器发生故障。这表明套接字未关闭或内核 I/O 缓冲区未释放。(更有可能是未关闭的套接字)
  2. 通过“net sh winsock catalog > wsockcat.txt”检查 winsock 堆栈中是否存在未知或外部的分层服务提供程序 (LSP)。将输出与其他 Windows 服务器进行比较。首先怀疑任何插入堆栈且源自 mswsock.dll 之外的提供程序。
  3. 如果问题在于非分页池不足,请查看是否重新启动应用程序或数据库服务器释放内存。您可能没有使用连接池,因此如果某些数据库访问层保持旧连接打开,则“sp who”和“list applications”可能会显示有趣的结果。

如果您确实看到数据库服务器在 #3 中报告大量空闲连接,您可以通过编写脚本来主动关闭套接字服务器端未使用的连接来缓解该问题。

答案2

这是一次盲目的尝试,但是我必须尝试一下。

“函数返回 10055”是来自 WinSock(ODBC 使用的 Windows 套接字库)的一般内存不足或资源不足错误。

有没有办法配置 SQL Server 到 DB2 的连接,以便它使用命名管道而不是 TCP/IP?这样就可以完全绕过 WinSock。

答案3

本周,一个存在句柄泄漏的应用程序给我带来了麻烦。其中一个症状是“portqry.exe”会返回 Winsock 10055 错误。

相关内容