DSS 无法连接到不同的 Oracle 数据库版本

Posted

技术标签:

【中文标题】DSS 无法连接到不同的 Oracle 数据库版本【英文标题】:DSS cannot connect to different Oracle database versions 【发布时间】:2016-09-27 14:20:52 【问题描述】:

我正在使用 WSO2 数据服务 (3.5.1) 服务器连接一些 Oracle 12c 数据库。但是,为了支持 legacy,我还需要连接到不同的版本,如 10g 和 8i。

有问题,使用ojdbc14.jar驱动程序,数据源:8i工作10g工作12c给出:ORA-28040: No matching authentication protocol(由于SHA算法在第 12 版)

使用ojdbc6.jarojdbc7.jar10g 有效12c 有效8i 给出:

org.wso2.carbon.ndatasource.common.DataSourceException: Error establishing data source connection: 4  
...
Caused by: java.sql.SQLException: 4
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:290)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:702)
...
Caused by: java.lang.ArrayIndexOutOfBoundsException: 4
    at oracle.jdbc.driver.T4C8TTIdty.<init>(T4C8TTIdty.java:491)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1434)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486)
...

寻找解决方案,我找到了一些替代方案,通过在12c数据库的oracle/network/admin/sqlnet.ora文件中设置参数SQLNET.ALLOWED_LOGON_VERSION=8并使用ojdbc14.jar,但由于基础设施限制,这种方法是不可接受的。

我想知道是否有办法在 DSS 中同时使用这两个驱动程序,也许指定一些自定义 Java 类扩展不同的 OracleDriver 类,并配置 DSS 类加载器......或一些不同的解决方案。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

这是 oracle 驱动程序中已知的向后兼容性限制1、2,并且在 wso2 DSS 中没有解决方案作为解决方法。这已在Oracle version compatibility matrix 中明确说明。

您是否尝试过不同版本的旧 ojdbc 驱动程序,它们可能适用于两个 oracle 版本(例如:oracle 驱动程序 10)。当然,并非所有功能都可以正常工作,但您最终可能会连接到所有数据库并毫无问题地执行基本操作。

【讨论】:

以上是关于DSS 无法连接到不同的 Oracle 数据库版本的主要内容,如果未能解决你的问题,请参考以下文章

Reporting Services:无法使用集成安全性连接到 Oracle

无法从 C# 通过 Wallet 连接到 Oracle DB

尝试从 Spark 连接到 Oracle

如何在 bash 脚本中连接到 Oracle 数据库?

Python FTP util,支持ssh-dss公钥算法

无法使用 JDBC 连接到远程 oracle 数据库