我们正在运行带有连接池的tomcat服务器,并且最近一直在随机获取此错误。当我们随机地在包中运行存储过程时会发生这种情况。我自己试图对这个问题进行一些研究,这导致了这个Java类的来源,我认为这个错误是从http://ora-jdbc-source.googlecode.com/svn/trunk/OracleJDBC/src/oracle/jdbc/driver/T2CCallableStatement.java
转发的。我的问题是:什么是9号访问者类型?它没有在我提供的示例类中定义,但是编写该类的人显然必须有一个访问者列表及其相应的数字,如果可能的话我希望看到,但是一直无法找到。
我还在错误日志中找到了其他访问者类型编号,例如:6也显示了。
更新:我找到了一个详细说明数据类型及其代码值的页面,但数据类型6和9显然不存在,使得此错误甚至更奇怪: https://docs.oracle.com/cd/E11882_01/appdev.112/e10646/oci03typ.htm#LNOCI030
答案 0 :(得分:1)
当代码中存在并发问题时,似乎这个问题是由Java引起的。当我们的程序运行一个线程池并且程序员错误地假设在每个线程中使用相同的连接只为SELECT语句时,我们得到了上面的问题就可以了(根据Java Connection类,它在技术上应该没问题)。我想这只是为了表明Oracle DB的Java连接jar不是线程安全的。
答案 1 :(得分:1)
我刚遇到同样的问题,但类型是6.问题是由于没有关闭(调用.close())准备好的语句和保存查询结果的结果集。实例化新的预准备语句和结果集是不够的,您必须始终关闭它们。经验教训。