首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.sql.SQLException:侦听器拒绝连接,错误如下: ORA-12519,TNS:找不到适当的服务处理程序

java.sql.SQLException:侦听器拒绝连接,错误如下: ORA-12519,TNS:找不到适当的服务处理程序
EN

Stack Overflow用户
提问于 2013-04-26 14:56:16
回答 3查看 51.8K关注 0票数 4

我将Resultset对象传递给每个线程。每个线程都连接到数据库并插入数据。在线程110之前,它工作得很好。当它超过111个线程时,它会抛出上面的异常。

我正在使用oracle 11g。

我的示例线程代码是:

代码语言:javascript
复制
class MyThreadClass implements Runnable 

{

    public Connection connection;

    public Statement statement2;

    public ResultSet rs2;    

    public String cookie;


    public MyThreadClass(ResultSet rs1)  
    {
      rs2=rs1;
    }

    public void run() 
    {    
       try
       {                    
            cookie=rs2.getString("COOKIE");
            driver = "oracle.jdbc.driver.OracleDriver";
            url    = "jdbc:oracle:thin:@127.0.0.1:1521:xx";
            /* connection

                statement2.executeUpdate("INSERT INTO visit_header  VALUES ('"+cookie+"')");

       }

我不知道如何处理这个异常。

EN

回答 3

Stack Overflow用户

发布于 2013-04-26 15:41:34

您的多线程应用程序打开的连接/会话太多。因此,监听程序会在一段时间内丢弃和阻止新连接。

首先检查您的DB资源使用情况:

代码语言:javascript
复制
SELECT * FROM v$resource_limit WHERE resource_name IN ('processes','sessions');

检查您的进程或会话的MAX_UTILIZATION是否离LIMIT_VALUE太近。如果是,您应该:

  1. 使用DB连接池在线程之间共享Connection对象。或者,
  2. 增加了Oracle可以为simultaneously.

提供服务的进程/会话数

实际上,应该始终执行连接池(#1)。否则,应用程序就无法向上扩展。有关详细信息,请查看Apache Commons DBCP。对于#2,以SYSTEM身份打开一个新的SQL*Plus会话并运行:

代码语言:javascript
复制
ALTER system SET processes=<n-as-per-number-of-threads> scope=spfile;

增加后端并发性。然后重新启动数据库。重要!

票数 19
EN

Stack Overflow用户

发布于 2013-04-26 15:05:00

我猜数据库只是不接受来自你的主机的更多连接。如果我对你的问题理解正确的话,你可能会在短时间内创建100个线程,每个线程都连接到数据库。也许你甚至没有正确地关闭连接,或者访问持续的时间太长,以至于打开了大量的连接。数据库有接受连接的限制。

你绝对应该通过一些聪明的技巧来减少连接的数量。可以减少并发线程的数量和/或使用连接池。

票数 1
EN

Stack Overflow用户

发布于 2016-10-19 18:56:13

在您的终端尝试此解决方案。这对我很管用。关闭try/catch块中的连接,并在关闭连接后写入-

代码语言:javascript
复制
Thread.sleep(1000);

在这种情况下,您可以将其编写为-

代码语言:javascript
复制
finally {
            try {
                if (conn != null && !conn.isClosed())
                    {
                    conn.close();
                    Thread.sleep(1000);
                     }
                }
            catch (SQLException e) {
                e.printStackTrace();}
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16230446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档