Io例外:Oracle云中的Oracle错误ORA-12650

时间:2017-10-24 20:23:40

标签: java spring oracle11g spring-jdbc oracle-cloud-infrastructure

我一直在为我的数据库机器(Oracle 11g)使用Oracle云PAAS linux服务器,并拥有可以运行所有Java应用程序的linux应用程序服务器。

假设我有基于Spring的Web应用程序,它可以连接云数据库机器。我试图在Toad中访问oracle中的模式,它按预期工作但当我尝试命中数据库从应用程序检索数据时,它会给出以下错误。

java.sql.SQLException: Io exception: Oracle Error ORA-12650
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:420)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:154)
    at GetConnection.main(GetConnection.java:35)

我还尝试将服务访问从SID扩展到数据库机器中的服务名称。仍然给出同样的错误。相同的代码在我们设置的另一台云计算机上运行良好。但是这个云计算机是由oracle团队完成的,大部分都是默认的。

请分享您的建议以解决此问题。

3 个答案:

答案 0 :(得分:1)

此问题是由于Oracle DB计算机加密 ENCRYPTION_SERVER 设置。据我所知,哪个是默认值并将其设置为启用,当我们将其设置为 禁用 或注释该行时,应用程序将按预期工作。以下是供参考的文件名

Filename : sqlnet.ora (We have to disable ENCRYPTION_SERVER settings)
File Location : ../oracle/product/11.2.0/dbhome_1/network/admin 

希望这对某人有所帮助。!

答案 1 :(得分:0)

这根本没有帮助我。实际上,我遵循了您的解决方案,最终遇到了另一个比尝试解决的错误更为严重和严重的错误。 让我解释。首先,您提到的值“ disabled”甚至不是该参数的可接受值。根据Oracle(Oracle Docs),这些是任何人都可以使用的可接受的值:

SQLNET.ENCRYPTION_SERVER 目的

为数据库服务器打开加密。

默认

接受

  • accepted:如果另一方需要或要求,则启用安全服务。

  • rejected:即使另一端要求也禁用安全服务。

  • requested:如果另一方允许,则启用安全服务。

  • required:启用安全服务,如果另一侧未启用安全服务,则禁止连接。

示例

SQLNET.ENCRYPTION_SERVER=accepted

在我的情况下,如果是12c Oracle Cloud数据库,则默认值设置为“ required”(必需),在尝试启动我的应用程序时出现错误“ Io exception:Oracle Error ORA-12650”。 将参数设置为“ accepted”可以解决该问题,并成功启动了我的应用程序。 如果仍然出现错误,也可以将以下参数设置为accepted: SQLNET.CRYPTO_CHECKSUM_SERVER =已接受 如果您在sqlnet.ora中看到该值设置为“ required”。

请记住,我的应用程序和OCI设置仅用于测试目的,并不打算在生产环境中使用。将SQLNET.ENCRYPTION_SERVERSQLNET.CRYPTO_CHECKSUM_SERVER的值设置为“ accepted”将大大降低数据库的安全性,使其容易受到来自有权访问它的任何应用程序的任何攻击。最好的情况是修改您的应用程序以使用“要求”的ENCRYPTION。

答案 2 :(得分:0)

将 OJDBC jar 降级到 version7 也有效 - 在依赖文件中用 ojdbc7.jar 替换更高版本(ojdbc14.jar 是我的罪魁祸首)