我们在 ora12c Db 中有一个 oracle 模式。它被配置为有 7 天的密码过期警告。我们已经到了这个时期。但密码尚未过期。我们使用 Oracle OCI 驱动程序通过使用 Java 作为语言的 Vertx 应用程序进行连接。每当连接到模式时,它都会发出如下警告。
java.sql.SQLWarning: ORA-28002: the password will expire within 6 days
at oracle.jdbc.driver.DatabaseError.addSqlWarning(DatabaseError.java:950) ~[ojdbc7.jar:12.1.0.2.0]
at oracle.jdbc.driver.T2CConnection.checkError(T2CConnection.java:1008) ~[ojdbc7.jar:12.1.0.2.0]
at oracle.jdbc.driver.T2CConnection.logon(T2CConnection.java:536) ~[ojdbc7.jar:12.1.0.2.0]
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666) ~[ojdbc7.jar:12.1.0.2.0]
at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtension.java:54) ~[ojdbc7.jar:12.1.0.2.0]
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:566) ~[ojdbc7.jar:12.1.0.2.0]
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:161) ~[c3p0-0.9.5.2.jar:0.9.5.2]
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:161) ~[c3p0-0.9.5.2.jar:0.9.5.2]
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:147) ~[c3p0-0.9.5.2.jar:0.9.5.2]
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:202) [c3p0-0.9.5.2.jar:0.9.5.2]
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138) [c3p0-0.9.5.2.jar:0.9.5.2]
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125) [c3p0-0.9.5.2.jar:0.9.5.2]
at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44) [c3p0-0.9.5.2.jar:0.9.5.2]
at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870) [c3p0-0.9.5.2.jar:0.9.5.2]
没关系。但是后续查询获得的连接会抛出/零错误,这是一种奇怪的行为。
java.lang.ArithmeticException: / by zero
at oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedStatement.java:1387) ~[ojdbc7.jar:12.1.0.2.0]
at oracle.jdbc.driver.T2CPreparedStatement.<init>(T2CPreparedStatement.java:109) ~[ojdbc7.jar:12.1.0.2.0]
at oracle.jdbc.driver.T2CDriverExtension.allocatePreparedStatement(T2CDriverExtension.java:81) ~[ojdbc7.jar:12.1.0.2.0]
at oracle.jdbc.driver.PhysicalConnection.prepareStatementInternal(PhysicalConnection.java:2013) ~[ojdbc7.jar:12.1.0.2.0]
at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:1960) ~[ojdbc7.jar:12.1.0.2.0]
at oracle.jdbc.driver.T2CConnection.prepareStatement(T2CConnection.java:57) ~[ojdbc7.jar:12.1.0.2.0]
at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:1866) ~[ojdbc7.jar:12.1.0.2.0]
at oracle.jdbc.driver.T2CConnection.prepareStatement(T2CConnection.java:57) ~[ojdbc7.jar:12.1.0.2.0]
at com.mchange.v2.c3p0.impl.NewProxyConnection.prepareStatement(NewProxyConnection.java:567) ~[c3p0-0.9.5.2.jar:0.9.5.2]
at io.vertx.ext.jdbc.impl.actions.JDBCQuery.execute(JDBCQuery.java:43) ~[vertx-jdbc-client-3.7.1.jar:3.7.1]
at io.vertx.ext.jdbc.impl.actions.JDBCQuery.execute(JDBCQuery.java:30) ~[vertx-jdbc-client-3.7.1.jar:3.7.1]
at io.vertx.ext.jdbc.impl.actions.AbstractJDBCAction.handle(AbstractJDBCAction.java:58) ~[vertx-jdbc-client-3.7.1.jar:3.7.1]
at io.vertx.ext.jdbc.impl.actions.AbstractJDBCAction.lambda$execute$0(AbstractJDBCAction.java:66) ~[vertx-jdbc-client-3.7.1.jar:3.7.1]
at io.vertx.core.impl.ContextImpl.lambda$executeBlocking$2(ContextImpl.java:272) ~[vertx-core-3.7.1.jar:3.7.1]
at io.vertx.core.impl.TaskQueue.run(TaskQueue.java:76) ~[vertx-core-3.7.1.jar:3.7.1]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_152]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_152]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.34.Final.jar:4.1.34.Final]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_152]
有没有办法在不将驱动程序更改为 thin 的情况下解决这个问题?
最佳答案
您是否尝试过 clearWarnings()? 连接.clearWarnings(): https://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#clearWarnings()
关于java - Oracle OCI 驱动程序在密码过期警告时抛出/零错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62828305/