oracle connection.close()不关闭服务器端的连接

hivapdat  于 2023-05-28  发布在  Oracle
关注(0)|答案(1)|浏览(227)

我在Oracle DB上做一些数据验证。有10种不同类型的验证我必须做。每组验证包含数百个测试用例。为了保存时间,我在10个不同的线程上并行运行验证。每个线程打开一个数据库连接,执行测试用例,然后关闭连接--并对下一个测试用例执行相同的操作。问题是我最多可以有8个并发的oracle会话。目前不可能增加会议次数。为了处理这个场景,我使用Semaphore将并发oracle会话的数量限制为8

public class DatabaseConnection{
 Semaphore counter = new Semaphore(8);
 public Connection createConnection(){
   ...
   ...
   counter.acquire();
   Connection connection = DriverManager.getConnection(....
   ...
}

public closeConnection(Connection con){
  ...
  con.close();
  counter.release();
}
}

即使我在执行每个测试后正确地关闭连接,我也会得到maximum number of sessions exceeded异常。我怀疑即使我关闭了连接,它也没有在服务器端正确关闭。这有什么解决办法?

rpppsulh

rpppsulh1#

我在10个不同的线程上并行运行验证。
我想知道你是怎么进行平行测试的?有没有可能最终得到DatabaseConnection类的10个示例?如果是,那么你也会得到10个信号量,每个信号量计数8次。在这种情况下,最大连接数将为80…您可以避免将信号量声明为静态。

static Semaphore counter = new Semaphore(8);

相关问题