2012-06-13 192 views
4

使用C#和Oracle Data Provider for .NET(ODP)我對數據庫進行了長查詢,然後使用TOAD結束了服務器端的連接。在此之後,後續調用到數據庫,甚至創造一個新的OracleConnection對象時,會引發以下錯誤:嘗試連接到Oracle數據庫時出現「ORA-01012」錯誤消息

ORA-01012: not logged on 
Process ID: xxx 
Session ID: yyy Serial number: zzz 

凡進程ID和Session ID是我用來結束連接標識符。

好像當我結束連接到服務器端的Oracle數據庫時,斷開的連接返回到連接池。當C#客戶端代碼(使用ODP)打開一個新連接時,可能會檢索到返回到連接池的斷開連接。

有關如何解決此行爲的任何想法?

順便說一句,我使用的是Oracle客戶端10

+0

爲什麼殺死TOAD中的連接?爲什麼不處理C#中的close? – Limey

+0

@Limey所有這些都是因爲應用程序在OLTP DB中進行bussines inteligence查詢而不是OLAP DB(我無法更改,至少現在不會)。因此,有時儘管進程很長,但用戶不會使用「取消選項」,因爲應用程序希望系統返回他等待的數據,這就是爲什麼DBA會終止會話並且應用程序不響應。 –

+0

所以看來你真正的問題是你的查詢運行時間很長。你看過改進嗎? – Limey

回答

4

我通過設置爲true來「驗證連接」屬性中的連接字符串中解決我的問題。

你可以閱讀更多here

警示我引用了Oracle文檔。

The Validate Connection attribute validates connections coming out of the pool. This attribute should only be used when absolutely necessary because it causes a server round-trip to the database to validate each connection right before it is provided to the application. If invalid connections are uncommon, developers can create their own event handler to retrieve a new connection, rather than using Validate Connection. This generally provides better performance.

+0

謝謝。它幫助:) –

相關問題