我们的一个客户端有一个在SQL Server 2005后端运行的应用程序(FoxPro 9)。它们间歇性地丢失了与SQL Server数据库的ODBC连接。以下是初始错误信息:
Err Msg:连接错误:[Microsoft] [ODBC SQL Server驱动程序] [DBNETLIB] ConnectionRead(recv())。
ODBC Err Msg:[Microsoft] [ODBC SQL Server驱动程序] [DBNETLIB] ConnectionRead(recv())。
SQL状态:01000
ODBC Err No:10054
ODBC句柄:1
FoxPro错误号:1526
我们无法在命令上复制此错误。我们已尝试过任何数量的解决方案都无济于事。我们发现的一个这样的硬件基础解决方案描述于:http://support.microsoft.com/kb/942861/en-us
我提到这一点,因为它几乎完全符合我们所看到的。但是,我们已经实施了该帖子中列出的所有变通办法(以及此一个http://support.microsoft.com/kb/948496) - 问题仍然存在。
此问题似乎在执行长时间运行的查询后显示,但我们没有从应用程序或SQL Server收到任何超时错误。我不相信这是空闲超时的结果,因为它有时发生在执行程序的中间。
我不是硬件人,但网络和服务器(Windows Server 2003)似乎都很快且设计得很好。但是,有时候数据库服务器承受着巨大的压力。
如果有人对我们可以尝试的事情有任何建议,请告诉我们!
答案 0 :(得分:1)
只是在黑暗中拍摄,但您是否尝试过运行跟踪并尝试捕获错误事件以及任何tsql。这可能会提供一些线索或帮助您查看模式。
答案 1 :(得分:1)
只是对这个问题采取后续行动......部分解决方案。
我确实跑过一条痕迹,实际上是其中的一些。我发现,这些错误似乎有多种原因。我能够找到并修复其中一个,但我们仍然在其他地方遇到此错误,并且它们没有显示我已经完成的跟踪。
那么我找到的那个交易是什么?好吧,从跟踪中我发现这些ODBC错误出现在另一个SQL Server错误之后:
Error: 1203, Severity: 20, State: 1.
Process ID 94 attempted to unlock a resource it does not own: OBJECT: 25:1699834390:0 . Retry the transaction, because this error may be caused by a timing condition. If the problem persists, contact the database administrator.
从FoxPro代码中我发现插入语句导致了这个错误...并不总是...但有时候。在这个插入中,他们将一个表中的所有字段和另一个表中的一些字段 - 拉到第三个表中。此数据库中的每个表都有一个名为id_col的标识列,填充第三个表的select语句返回两个id_col字段。
insert into tablethree
select a.*, b.price, b.item, id_col
from tableone a, tabletwo b
where a.item = ....
当我们重新构建代码以便只返回一个id_col时......错误停止了。
说实话,我同时修复了这个错误的另一个可能的贡献者。在此之前还有另一个大/长查询在sql server查询中使用Foxpro Rushmore语法(例如a.item+a.customer = lc_item+lc_customer
)。我们之前遇到过这类问题,所以它可能是问题的一个原因......但是证据非常有利于额外的身份专栏作为原因。
答案 2 :(得分:0)
不确定您是否遇到过完整的解决方案,但是您是否了解过网络连接是否中断? 我正在开发的其中一个VFP程序开始经常丢失用于使用笔记本电脑的用户的SQL连接。似乎笔记本电脑暂时失去了网络连接。即使连接仅消失了几秒钟,也需要重置VFP中的句柄。不确定这是否是你的确切问题,但听起来与我相似。