2012-12-04 28 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会自动删除当前没有使用的连接。但是这需要时间。
相关问题