Oracle错误-ORA-28374:在钱包中找不到键入的主密钥

时间:2018-07-23 20:01:59

标签: java oracle oracle12c

我正在使用带有Hikari线程池的Spring Boot连接到Oracle 12c DB。我所有的表都是在加密表空间中创建的。问题是,随机地,当我尝试连接到数据库时,出现以下异常。

java.sql.SQLException ORA-28374: typed master key not found in wallet 
      at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
      at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:392)
      at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:385)
      at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:1018)
      at oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:501)
      at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)
      at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
      at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:437)
      at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:954)
      at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:639)
      at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666)
      at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
      at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:566)
      at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:117)
      at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:123)
      at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:367)
      at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:196)
      at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:467)
      at com.zaxxer.hikari.pool.HikariPool.access$100(HikariPool.java:71)
      at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:706)
      at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:692)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      at java.lang.Thread.run(Thread.java:748)

如您所见,ojdbc驱动程序引发了错误。到目前为止,这是我尝试过的。

  • 检查数据库日志。 DBA在其日志中看不到任何错误。 (编辑:原来他们犯了一个错误,并最终告诉我他们确实在日志中看到了问题)
  • 升级我的ojdbc6.jar驱动程序。问题仍然存在。
  • 重新创建整个数据库。仍然会发生。
  • 通过在未加密的表空间中创建我的表进行测试。这可以解决问题,但是使用加密的表空间是公司的政策。
  • 使用SQLcl查询数据库。即使使用SQLcl,我仍然会显示此错误! SQLcl使用ojdbc8.jar驱动程序进行连接。

这可能是DBA不正确配置密钥轮换策略的地方吗?可悲的是,我无法控制数据库资源,因此无法从一开始就调试DB端,我必须与远程DBA交谈。任何线索都值得赞赏。

1 个答案:

答案 0 :(得分:0)

结果是,这是数据库方面的设置问题。 DBA通知我们,在Oracle集群中,钱包文件并未在所有节点上复制。这意味着,如果我们的应用程序尝试连接到没有相应钱包的节点,则会引发ORA-28374错误。