2014-02-06 30 views
0

我使用OracleODP.NET連接器連接到Oracle數據庫服務器。Oracle管理的ODP.NET:連接因網絡錯誤而被強制關閉

問題是由於幾個不同的問題(如網絡故障或服務器強制關閉對等連接)有時會丟失連接。 這會導致未捕獲的異常,因爲在查詢中或應用程序的空閒時間內未使用連接對象時,我無法捕獲異常。

問題是如何在連接丟失時捕獲Oracle連接異常? 有沒有任何回調技術或什麼可以告訴我關於斷線?

+0

你能告訴我們更多關於你爲什麼需要這個嗎?無論如何,你一直沒有使用連接,只要你嘗試了你就會知道有問題。 –

+0

在我的應用程序的許多地方使用單個連接對象。我想確保連接在使用時有效。我必須編輯很多代碼行,以便捕捉並修復斷開連接(如果沒有任何其他方法,我會這樣做)。所以,我想攔截斷開異常並嘗試再次恢復連接,以便其他位置(使用連接對象的位置)甚至不會注意到斷開連接發生在第二次以前。發生斷線時究竟發生了什麼?當連接斷開時,連接對象獲得什麼狀態? –

+0

在使用完連接池之後,是否可以簡單地將連接返回到OracleConnection連接池,並在需要時獲取另一個連接?很容易配置連接池,以確保它分配的連接始終有效。 (使用Validate Connection = true)http://docs.oracle.com/html/E10927_01/featConnecting.htm –

回答

0

請參閱上面關於Validate Connection = true的連接池連接字符串中的我的評論。

您也可以編寫自己的「連接測試程序」例程,對數據庫執行「從雙重選擇sysdate」以測試連接。

這兩種解決方案都會導致數據庫往返。這些解決方案都不能完全防止網絡錯誤,因爲它們在測試之後可能會發生。

如果您不想要未處理的異常,您需要在使用ODP.NET對象時捕捉異常。

沒有可用的回調機制來防止這種情況發生。

我不太明白你是怎麼說你在使用odp.net對象時收到異常的。如果您遇到異常,那麼您必須在當時使用odp.net對象,因此您可以捕獲該代碼中的異常。

+0

謝謝!我明白了。 –

相關問題