2009-01-08 121 views
2

我们的客户之一有一个在SQL Server 2005后端上运行的应用程序(FoxPro 9)。间歇地,他们正在失去与SQL Server数据库的ODBC连接。以下是最初的错误信息:丢失与SQL Server 2005数据库的ODBC连接

Err Msg: Connectivity error: [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionRead (recv()).

ODBC Err Msg: [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionRead (recv()).

SQL State: 01000

ODBC Err No: 10054

ODBC Handle: 1

FoxPro Error No: 1526

我们不能在命令上复制此错误。我们尝试了任何解决方案都无济于事。我们发现的一个这样的硬件基础解决方案描述如下:http://support.microsoft.com/kb/942861/en-us

我提到这一点是因为它几乎完美匹配我们所看到的。但是,我们已经实施了该帖子中列出的所有解决方法(并在此http://support.microsoft.com/kb/948496中) - 问题仍然存在。

此问题似乎在执行长时间运行的查询后显示,但我们没有收到来自应用程序或SQL Server的任何超时错误。我不认为这是空闲超时的结果,因为它有时发生在执行程序的中间。

我不是一个硬件人,但网络和服务器(Windows Server 2003)似乎都是快速且设计良好的。然而,有时候数据库服务器处于重大压力之下。

如果任何人有任何建议,我们可以尝试...请让我们知道!

回答

1

只是在黑暗中拍摄,但您是否尝试过运行轨迹并尝试捕获错误事件以及任何tsql。这可能会提供一些线索或帮助您查看模式。

+0

我们确实尝试过一次......但当然我们在追踪时并没有发生。有太多用户打我们的系统来尝试一般跟踪。我们必须有一个非常狭窄的范围,并希望它发生在这个范围内。我们可能会再试一次。 – Clinemi 2009-01-08 19:13:06

+0

也许只是捕获错误事件 - 我不知道这是否会告诉你任何东西超过你得到的。如果你不知道,2005分析器也可以与perfmon数据相关联,所以你可以收集一些统计数据,看看它是否在系统压力下发生。 – Sam 2009-01-08 22:38:14

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代码我发现一个INSERT语句造成这个错误......不一定......但有时。在这个插入中,他们将一张表中的所有字段以及另一张表中的一些字段拖到第三个表中。此数据库中的每个表都有一个称为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)之前还有另一个大/长查询。之前我们遇到过这种类型的问题,所以它可能成为问题的原因......但是证据高度支持额外的身份专栏。

0

不确定您是否遇到了一个完整的解决方案,但是您是否查看过网络连接是否会中断? 我正在开发的VFP程序之一,开始使用便携式计算机的用户非常频繁地丢失SQL连接。似乎笔记本电脑暂时失去了网络连接。即使连接只持续了几秒钟,VFP中的句柄也需要重置。不知道这是否是你确切的问题,但听起来与我相似。

1

使用pb应用程序和ms sql作为db,并从头开始设置2个事务对象。 一个函数使用第一个事务循环游标,并且在此循环中,第二个事务对象用于更新另一个表。如果更新后没有使用显式提交(第二个事务obj),那么第一个连接将关闭,并且我得到[Microsoft] [ODBC SQL Server Driver] [DBNETLIB] ConnectionRead(recv())错误。一旦我为相应的事务调用适当的提交语句,所有事情都像魅力一样。 并且是的,错误总是出现在实际发生崩溃的位置之前 - 假设您处于调试模式。 有趣的是,Sybase设法关闭/打开适当的事务,而不需要明确地发出对第二个事务对象的提交!!!!