2009-01-08 44 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設法關閉/打開適當的事務,而不需要明確地發出對第二個事務對象的提交!!!!

相關問題