2011-07-18 125 views
3

這更具體地說是與SQL Server Reporting Services相關,但我也將其視爲典型的.Net應用程序問題。Oracle與.Net的連接 - 連接池

這是問題所在。我們正在使用SSRS報告來自Oracle數據庫的數據。從第1天起,我們的用戶抱怨他們得到如ORA-2396的錯誤:超出最大空閒時間,ORA-01012-未登錄等。

我們已經包括DBA,應用程序開發人員,網絡工程師,但到目前爲止,我們可以沒有找到更好的線索。最近在進行一些研究時,我發現很多人都記錄了一個與.Net連接到oracle的「已知」問題。就像他們提到的那樣,如果我們使用連接池,那麼即使沒有用的連接也可能在池中可用。在下一次請求時,可能會使用此連接,並在此時拋出錯誤。正如我們的DBA所證實的,我們的oracle實例被設置爲在連接X分鐘空閒時終止連接。

下面是它具有上述提到 http://msdn.microsoft.com/en-us/library/8xx3tyca(v=VS.90).aspx

http://www.codeproject.com/KB/dotnet/ADONET_ConnectionPooling.aspx

有幾個得更爲出色的鏈接。然而,我沒有得到任何確認的聲明,說是的,這是目前的問題(最新版本的.Net和oracle等)。

在解決方案部分,他們提到我們將使用「Validate Connection = true」屬性作爲連接字符串的一部分。但如果我嘗試使用它,它會顯示「不支持關鍵字 - 驗證連接」。 (我也嘗試過Validcon)

問題我有這些 1.是否確認從連接池問題中讀取「髒」存在? 2.如果有,解決方案是什麼? 3.如果不是,可能是導致我們結束的問題。

如果您需要更多信息,請隨時發表評論。

+0

有效的SQL Server連接字符串在這裏:http://msdn.microsoft.com/en-我們/庫/ system.data.sqlclient.sqlconnection.connectionstring.aspx。您可能想嘗試關閉連接池:將最大池大小設置爲1來執行此操作。 –

+0

根據組織政策,禁止有關限制池大小或關閉池的選項。 –

回答

0

這是一個已知問題,它發生在使用連接池的任何地方,並取決於幾件事情 - 其中之一是服務器上的設置...有時甚至在使用Oracle RAC時很複雜...... 某些Oracle。 NET提供商有內置的解決方案,可以無縫地集中處理這個問題...... Devart銷售的一個此類提供商... http://www.devart.com/dotconnect/oracle/

我不屬於Devart,只是一個快樂的客戶...

1

這裏的根本問題屬於你的DBA。當我使用一個帳號(即我的個人oracle帳號)時,我發現同樣的錯誤,這個帳號可以被我們的DBA運行的同一空閒連接清理所接受。最好的解決辦法是讓他們爲您分配一個「空閒」時間後未終止的「服務」帳戶。

這就是說,我猜你會得到「關鍵字不支持 - 驗證連接」,因爲你使用的是微軟提供者而不是oracle提供者。我對SSRS連接並不熟悉,所以我不確定你如何選擇其中一個。但在.net中,它是System.Data.OracleClient和Oracle.DataAccess之間的區別。

如果得到解決方案,驗證連接選項通過在使用連接之前對連接進行預ping來增加開銷,使其比簡單地禁用連接池稍好。你可以嘗試的另一件事是設置最小池大小= 0,這可以讓池無用,讓連接閒置時間過長的可能性較小。不幸的是,它不是一個完美的解決方案,因爲提供者僅在使用它們之後檢查陳舊的連接。

這裏的參考連接字符串參數爲Oracle的數據提供者,如果你不已經擁有了它: http://download.oracle.com/docs/html/E10927_01/featConnecting.htm#i1006393

+0

感謝您的回覆。是的,我意識到爲什麼連接字符串屬性不recogzined。我還看到關於DBA改變設置的觀點。但是,我的核心問題是,它是否證實連接池行爲只是這樣?即在某些情況下,池中可能存在實際上根本不可用的連接,並且在實際使用之前無法清除它們? –

+0

有一些程序化的東西你可以做,但在SSRS的情況下,我會說除了禁用池化之外,沒有什麼可以做的了(在我看來,這是一個完全合法的選擇,考慮到在報告環境中連接創建可能可以忽略不計長查詢時間和大型數據集是常態)。 由於在連接返回後檢查連接生存期到期,我認爲不存在保證的解決方案,只有可以減少問題的更改。 –

+0

如果想繼續使用MS提供程序http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracleconnection.connectionstring(VS),可以使用以下鏈接指向我的連接字符串選項。 80)的.aspx –