2

我设置了连接池,更改了 oracle 的作业流程。但仍然收到此错误:ORA-12516, TNS:listener could not find available handler with matching protocol stack 客户端使用的连接描述符是

除了连接池或 oracle 作业进程设置之外,是否还有任何特定配置需要完成以解决此错误

4

3 回答 3

2

上述解决方案只是掩盖了问题。几乎死后,我找到了一个真正有效的解决方案。出于某种原因,使用休眠 OracleDialect(或 Oracle10gDialect)运行的 Oracle 驱动程序需要额外的参数。

我正在使用 Spring 映射我的 jdbc 连接

  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@localhost:1521:mydb" />
    <property name="username" value="mydbuser" />
    <property name="password" value="12345" />
   </bean>

然后,我将其更改为使用 JNDI:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/mydb" />
</bean>

在我的 context.xml (Tomcat) 中使用此信息:

<Resource name="jdbc/mydb"
        type="javax.sql.DataSource"
        auth="Container"
        driverClassName="oracle.jdbc.driver.OracleDriver"
        url="jdbc:oracle:thin:@localhost:1521:mydb"
        username="mydbuser"
        password="12345"
        maxActive="20"
        maxIdle="10"
        maxWait="-1"
        validationQuery="select 1 from dual" />

这解决了我的问题。可能以下配置之一 maxActivemaxIdlemaxWait向 Oracle 提供了关闭会话并将其返回到池中所需的值。我在我的系统中保持这种方式,因为我有一个待定的任务要迁移到 JNDI,但是,如果您不想使用 JNDI,请尝试在hibernateProperties中搜索可能有效的类似值。

Obs.: JNDI 可用于 Jetty 添加org.eclipse.jetty.plus.jndi.Resource类的标签到jetty.xml

于 2012-11-22T19:27:36.120 回答
1

我遇到过同样的问题。这解决了我的问题,使用 DBA 运行此查询:

ALTER SYSTEM SET PROCESSES=150 SCOPE=SPFILE;
于 2012-07-20T12:05:29.187 回答
0

我遇到了同样的问题,并且还使用了 Spring 的 DriverManagerDataSource 作为 mchamati。但是,我没有使用tomcat或其他中间应用服务器来使用他提出的JNDI解决方案。我解决了将 DriverManagerDataSource 替换为 Oracle 的特定扩展,它是“Spring 数据项目”( http://projects.spring.io/spring-data-jdbc-ext/ ) 的一部分,现在可以使用。

我解决如下:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:orcl="http://www.springframework.org/schema/data/orcl"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.1.xsd
       http://www.springframework.org/schema/data/orcl
       http://www.springframework.org/schema/data/orcl/spring-data-orcl-1.0.xsd">

    <orcl:pooling-datasource id="datasource"
                             url="jdbc:oracle:thin:@localhost:1521/xe"
                             username="myusername"
                             password="mysupersecretpassword"
            connection-caching-enabled="true">
        <orcl:connection-properties>
            v$session.program=MyApplicationName
        </orcl:connection-properties>
    </orcl:pooling-datasource>

</beans>

由于 pom.xml 依赖项中 Spring Framework 的不同版本,存在冲突。所以,我不得不在 may pom.xml 中对依赖进行 decalre,如下所示:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-oracle</artifactId>
    <version>1.2.1.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
        </exclusion>
    </exclusions>
</dependency>

完整说明的链接:http: //docs.spring.io/spring-data/jdbc/docs/current/reference/html/orcl.datasource.html

于 2016-05-19T21:08:14.067 回答