【问题标题】:Io exception: Oracle Error ORA-12650 in Oracle CloudIo 异常:Oracle 云中的 Oracle 错误 ORA-12650
【发布时间】:2017-10-24 20:23:40
【问题描述】:

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

假设我有可以连接云数据库机器的基于弹簧的 Web 应用程序。我尝试访问 Toad for 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 扩展到 DB 机器中的服务名称。仍然给出同样的错误。相同的代码在我们设置的另一台云机器上运行良好。但是这个云机是oracle团队做的,大部分都是默认的。

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

【问题讨论】:

  • 这与 OCI (console.us-phoenix-1.oraclecloud.com) 有关吗?
  • 我在本地创建了独立的 Java 应用程序,并连接了在 Oracle 云 Linux 服务器上运行的 Oracle DB。
  • 数据库服务器上是否启用了 ASO(或:网络加密)?
  • 谢谢我得到了线索,找到更多细节的答案。

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


【解决方案1】:

这个问题是由于 Oracle DB 机器加密 ENCRYPTION_SERVER 设置造成的。据我了解,这是默认设置并将其设置为启用,当我们将其设置为 disabled 或注释该行时,应用程序将按预期工作。以下是文件名供参考,

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

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

【讨论】:

    【解决方案2】:

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

    SQLNET.ENCRYPTION_SERVER 目的

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

    默认

    接受

    价值观

    • accepted:在对方需要或请求时启用安全服务。

    • rejected: 禁用安全服务,即使对方要求。

    • requested:在对方允许的情况下开启安全服务。

    • required:启用安全服务,如果对方没有启用安全服务,则禁止连接。

    例子

    SQLNET.ENCRYPTION_SERVER=accepted
    

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-10
        • 2011-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-21
        • 1970-01-01
        相关资源
        最近更新 更多