2012-11-03 49 views
5

首先,我想告訴你,我正在使用的程序已經編譯完成,我無法查看源代碼。SQL Server 2008 R2:在一段時間後拒絕連接

所以,這裏是我的問題:

的應用程序成功打開約31連接到特定的數據庫。 當它試圖打開第32個連接時,所有連接開始關閉,包括之前的31個連接。

說實話,我不知道爲什麼這個應用程序需要打開相同的2-3個表的連接數,但所有的連接都關閉後,在應用程序關閉了。

17時41分38秒004db680 DRIVER = {SQL 服務器}; SERVER = 192.168.1.8:1433; UID =用戶; PWD =密碼; DATABASE =數據庫

17時41分38秒004db680 08001 0000000e [Microsoft] [ODBC SQL Server驅動程序] [DBNETLIB]連接無效。 00000000十七時41分38秒004db680 01000 0000000e [微軟] [ODBC SQL服務器 驅動程序] [DBNETLIB] ConnectionOpen(ParseConnectParams())。 00000000

這是從應用程序輸出的日誌。

一些額外的信息:

  • 殘疾SYN攻擊保護,同樣的問題
  • 數據庫最大連接數是30K +
+0

如果應用程序是用託管代碼編寫的,則可以嘗試對其進行反編譯。我發現Telerik的[JustDecompile](http://www.telerik.com/products/decompiler.aspx)工作得很好。 – Alexander

+0

您能提供您使用的連接字符串嗎? –

+0

我認爲當第32個連接失敗時,你的應用程序會拋出一個未處理的錯誤,並且它會關閉並首先關閉所有其他連接,所以你的問題是可能來自最大連接達到的第32個連接失敗;)。 –

回答

1

運行數據庫這句話,看看如果你超過最大連接數:

SELECT @@MAX_CONNECTIONS

0

有幾件事情來之前和應用程序的執行過程中想到

  1. 運行SQL事件探查器。你看到了什麼輸出?也許發生了死鎖?

  2. 這工作以前和最近停止工作?如果是這樣,你是否應用了SQL的Service Pack或其他修復程序?

  3. 如果你的程序是多線程的,以及他們正在做的每一個線程X連接,也許嘗試限制應用在單一內核上運行,而不是多個內核。這是一個骯髒的黑客,但它可能會有所幫助。

  4. 如果打開32X命令提示符窗口,然後使用OSQL或SQLCMD實用程序打開32個連接到SQL什麼?聽起來很愚蠢,但如果上述情況至少沒有結果,你可以看到它是否僅僅是連接的數量或是否還有其他事情正在進行。其他東西可能是

    • 數據相關(請參閱#1);或
    • 驅動程序相關(在應用程序內)。鑑於它使用ODBC,也許它是舊的(你沒有說什麼Windows版本,SQL版本等正在運行),你可以嘗試更新MDAC(MIcrosoft數據訪問組件)?