gpt4 book ai didi

java - 无法使用 19.3 JDBC 驱动程序连接到 Oracle 19.3

转载 作者:行者123 更新时间:2023-11-30 05:27:09 24 4
gpt4 key购买 nike

我们有一个使用 Oracle 19.3 数据库运行的项目,以及一个使用 Oracle 19.3 JDBC 驱动程序(可在 Maven Central 上找到)的 Java 应用程序。在使用 JRE 1.8 的 Windows 上,一切都很好,但是当我在构建服务器上或使用 OpenJDK 11.0.3 的 WSL Ubuntu 中运行时,它拒绝连接到数据库。具体来说:

ERROR: Unexpected error
java.sql.SQLRecoverableException:
Unable to obtain connection from database (jdbc:oracle:thin:@//<host>:<port>/<db>) for user '<user>': IO Error: Invalid argument, Authentication lapse 0 ms.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL State : 08006
Error Code : 17002
Message : IO Error: Invalid argument, Authentication lapse 0 ms.

at JuliasApplication.openConnection(JdbcUtils.java:60)
...
Caused by: java.sql.SQLRecoverableException: IO Error: Invalid argument, Authentication lapse 0 ms.
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:874)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:793)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:57)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:747)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:562)
...
Caused by: java.io.IOException: Invalid argument, Authentication lapse 0 ms.
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:870)
... 12 more
Caused by: java.io.IOException: Invalid argument
at java.base/sun.nio.ch.SocketChannelImpl.sendOutOfBandData(Native Method)
at java.base/sun.nio.ch.SocketChannelImpl.sendOutOfBandData(SocketChannelImpl.java:521)
at java.base/sun.nio.ch.SocketAdaptor.sendUrgentData(SocketAdaptor.java:323)
at oracle.net.nt.TcpNTAdapter.sendUrgentByte(TcpNTAdapter.java:433)
at oracle.net.ns.NSProtocolNIO.negotiateConnection(NSProtocolNIO.java:159)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:340)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1596)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:588)
... 12 more

如果我切换到 18.3 JDBC 驱动程序,则两种环境中的一切都很好;如果我切换到 18.3 数据库,则两种环境中的一切都很好。目前这确实给了我们一个解决方法,但是我们不明白发生了什么,这让我们感觉非常不舒服。我在网上找不到任何有关“身份验证失败”的信息。任何人都可以看到任何可以解释失败的线索吗?

最佳答案

看起来底层 Socket 实现不允许 OOB。作为解决方法,您可以通过将连接属性 CONNECTION_PROPERTY_THIN_NET_DISABLE_OUT_OF_BAND_BREAK 设置为“true”来禁用 OOB 检查。请引用此链接:https://docs.oracle.com/en/database/oracle/oracle-database/20/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_NET_DISABLE_OUT_OF_BAND_BREAK

上面的链接不再提及“带外中断”问题,因此这里有一些替代方案:

关于java - 无法使用 19.3 JDBC 驱动程序连接到 Oracle 19.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58319173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com