SQL开发人员提供了多种连接数据库实例的方法。
如果我选择Basic
方法(分别在输入框中提供hostname
,port
和SID
),则数据库连接会毫无问题地运行。
但是,如果我选择Advanced
方法,它在整体上提供以下JDBC网址:
jdbc:oracle:thin:@hostname:port:SID
并点击Test
按钮,有时状态显示为Success
,但有时会弹出如下错误消息:
Status : Failure -Test failed: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
那么为什么以及如何对这两种方法产生这样的差异呢?这是SQL开发人员的错误吗?
我发现问题恰好发生在我运行与同一数据库实例的JNDI连接的Java EE应用程序时,如果其中一个是JNDI,那么数据库实例监听器不能容忍多个访问?我想我就是这样做的......
答案 0 :(得分:0)
找到问题,简而言之,问题可以解决两个选择之一:
第一个解决方案由DBA运营,但第二个解决方案可以由开发人员实现,在我的应用程序的JNDI设置中(我们在Tomcat上测试JNDI),允许池的最大连接数量太多,以至于当前Oracle服务无法处理:
<Resource name="jdbc/schema_A" auth="Container" type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@hostname:1521:orcl"
username="app_A" password="app_A" maxActive="20" maxIdle="10" maxWait="-1" />
maxActive="20" maxIdle="10"
因此错误消息太多,所以我将其更改为
<Resource name="jdbc/schema_A" auth="Container" type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@hostname:1521:orcl"
username="app_A" password="app_A" maxActive="1" maxIdle="1" maxWait="-1" />
现在一切正常,没有问题......干杯......