2012-12-04 27 views
-1

我已經使用jsp/servlet創建了一個數據庫應用程序,該應用程序現在託管在生產服務器中。但是,當我使用應用程序執行一些任務時,數據庫會話數量超過150,則連接丟失。如果我不重新啓動數據庫服務器,我無法使用該應用程序。我正在使用ORACLE 11g。爲什麼運行我的應用程序會創建多餘的會話並刪除數據庫連接?

+0

「連接損失」是什麼意思?你有錯誤嗎?如果是這樣,有什麼錯誤?這是Oracle錯誤嗎?應用程序服務器發生錯誤?還有別的嗎?您是通過查看數據庫的數據字典(即'v $ session')來測量150個連接嗎?或者你正在尋找其他地方?您正在進行負載測試的活動是否需要150個物理連接?如果沒有,你幾乎可以確定你的代碼中存在連接泄漏。 –

+0

是的,我想知道如何處理定向到數據庫的更多進程,我發現與我的程序有關的錯誤,我沒有關閉一些數據庫連接。謝謝Justin –

回答

0

對於這個問題,你可以做兩件事情,

  1. 可以超過其可使用以下命令從數據庫處理的進程數。

    alter system set sessions = 300 scope = spfile; 
    

    要做到這一點,你必須先登錄到數據庫系統的用戶。

  2. 您可以檢查是否所有打開的數據庫連接都已關閉。

0

問題是缺少正確的數據庫連接關閉。當我們在每次迭代中關閉數據庫連接時執行一些重複的活動時。它增加了與數據庫的連接數量,並達到了根據每個定義的最大連接數。爲了避免這個問題,我們可以做兩件事,

  1. 我們可以增加最大會話金額。如果你正在增加會話參數,你應該考慮增加進程和事務參數。以下是可用於確定其值的公式。

過程= X
會話= X * 1.1 + 5
交易=會話* 1.1

爲此使用波紋管SQL腳本

SQL>改變系統設置進程= 500 scope = both sid ='';
sql> alter system set sessions = 555 scope = both sid ='
';
sql> alter system set transactions = 610 scope = both sid ='*';

  1. 另一種方法是你可以設計你的應用程序在同一時間比預先定義的多種不超過數據庫的連接。 Oracle會自動刪除當前沒有使用的連接。但是這需要時間。
相關問題