這裏是場景...ORACLE/ASP.NET:ORA-2020 - 數據庫鏈接太多......這是什麼原因造成的?
我們有一個內部網站運行最新版本的ODAC(Oracle客戶端)。它打開數據庫連接,運行存儲過程或打包方法,然後斷開連接。連接池已打開,目前我們在開發和測試環境下都使用11g版本,但在我們的生產環境下使用10gR2。這發生在生產上。
幾天前,一個進程開始引發ORA-2020錯誤。該流程從我們內部網站的網頁上調用。用戶只需設置日期,點擊按鈕,並在另一個與網站分開的系統上啓動作業。然而,調用本身使用數據庫鏈接來運行一個函數。
我們搜索了SQL,發現它只使用那一個數據庫鏈接。由於這些鏈接是基於每個會話並且用戶不超過默認限制4,因此我們如何獲得ORA-2020錯誤。
我們已經運行了大量的測試以試圖超過4的默認限制。從我所記得的情況來看,ODAC在每次連接後運行一次提交,並且我似乎無法運行4個數據庫鏈接,然後運行一個帶有1個數據庫鏈接的SQL,並且存在任何錯誤之後。我可以提出這個錯誤的唯一方法是如果我運行帶有4個DB鏈接的查詢,然後是一個包含數據庫鏈接的函數或動態SQL。我們沒有這個問題,因爲這個問題是零星的。這並不總是發生。
問題
- 是否有可能連接池是允許用戶B使用用戶A的連接的初始過程運行之後,因此增加了打開鏈接數量,如果用戶B運行在使用SQL語句更多數據庫鏈接?
- 這是我們應該超過4的限制嗎?增加號碼的缺點是什麼?
- 在從數據庫斷開連接之前,是否需要顯式關閉打開的數據庫鏈接? Oracle文檔似乎表明它應該自動發生,但「有時」......不。
經過更多測試後,第一個問題得到解答。至少在我們的11g環境中進行測試時,這絕對是不可能的。爲每個事務創建一個連接,並且ODP.NET隱式提交併且連接被關閉並放置在我們的代碼中。我們無法抓住另一個連接並使用會話。我們正在添加一些跟蹤來查看發生錯誤時鏈接是否打開。 – jlrolin 2012-04-09 18:12:59