我得到了“违反协议”。我在RedHat Linux.The数据库上运行了一个应用程序,该应用程序在机器上是共存的。
使用的Oracle版本:Oracle11g R2 (11.2.0.3.0)
使用的JDBC驱动程序: 12.1.0.1
使用的Java : jdk1.7.0.65 32位
我在许多论坛上都指出了这个错误是一个驱动程序问题,但是在所有这些论坛中,使用的oracle版本更高,驱动程序版本更老,而更改驱动程序解决了issue.But问题--在我的例子中,Oracle较低,但驱动程序版本是higher.So,在这种情况下,驱动程序的更高版本会不会是一个问题?
此外,当达到DB上的最大连接数时,也会出现这种协议冲突?
错误信息:
违反协议: 72次在oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:464),oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192),oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531),oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207),oracle.jdbc.driver。T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:884) at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1167) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1289) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584) at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3628) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1493)
发布于 2015-04-21 18:45:42
这样的错误表示JDBC瘦驱动程序中存在错误,无法理解服务器在连接(套接字)上返回的内容。
您总是可以尝试使用最新的JDBC瘦驱动程序,希望bug能够得到解决。截至今日,最新数字为12.1.0.2。
如果这没有帮助,那么您将需要接触Oracle支持。首先要问的是提供发生此错误的连接的sqlnet跟踪。这将帮助Oracle工程师了解故障发生时网络上发生的情况。
若要打开sqlnet跟踪,请编辑服务器上的sqlnet.ora文件并添加
TRACE_LEVEL_SERVER = 16
它将为跟踪管理器(服务器上)中的每个连接添加一个跟踪文件。不要在生产系统上这样做,因为它会大大降低系统的速度,并会产生大量的跟踪。
祝好运。
发布于 2016-08-26 10:51:43
在我的示例中,使用getGeneratedKeys() of PreparedStatement获取当前序列值会导致协议冲突异常。将其替换为从序列中获取序列电流值,如下所示:
String curSeqValQuery = "SELECT seq_name.CURRVAL FROM DUAL";
...
statement = con.prepareStatement(curSeqValQuery);
resultSet = (OracleResultSet) statement.executeQuery();
...解决了这个问题。
发布于 2018-10-04 12:59:30
在ojdbc7.jar -Version12.1.0.2中修复的问题(您可以在jar的META文件中签入)
https://stackoverflow.com/questions/29372626
复制相似问题