ORA-28040:没有匹配的身份验证协议:Oracle 12c升级

时间:2015-06-30 14:41:31

标签: oracle11g struts-1 oracle12c ojdbc java-5

我们已将Oracle数据库从11g迁移到12c。 我们有一个在Java 1.5中运行并使用ojdbc14.jar的遗留应用程序。

我们的应用程序无法创建与数据库错误的连接说:

java.sql.SQLException: ORA-28040: No matching authentication protocol

我决定回答ORA-28040: No matching authentication protocol exception,并尝试将我的ojdbc14.jar升级为ojdbc6.jar。

我现在有一条不同的错误消息:

  error: OracleCallableStatement is not public in oracle.jdbc.driver; cannot be accessed from outside package
import oracle.jdbc.driver.OracleCallableStatement;
                          ^
error: OracleTypes is not public in oracle.jdbc.driver; cannot be accessed from outside package
            cstmt.registerOutParameter(3,oracle.jdbc.driver.OracleTypes.CURSOR);
                                           ^

Ant构建文件:

<javac srcdir="${src}" destdir="${classes}" source="1.5" target="1.5">
            <classpath refid="cpath" />
</javac>

不确定我们应该做些什么才能让应用程序正常运行。

8 个答案:

答案 0 :(得分:4)

我最近在2个不同的应用程序中遇到了同样的错误:

  1. 使用odbc6.jar和Oracle 12 c数据库在Tomcat 7上创建Java 7应用程序。
  2. 使用Oracle 12 c数据库的传统ASP应用程序。
  3. 提到的第二个解决方案 same post you referred to - 对我们有用。

      

    解决方法:在oracle / network / admin / sqlnet.ora文件中设置SQLNET.ALLOWED_LOGON_VERSION = 8。

    我们与DBA一起在数据库服务器上的sqlnet.ora上设置了上述选项。这解决了我们的问题。我希望它有所帮助。

答案 1 :(得分:3)

我遇到了同样的错误。

  

在不删除ojdbc14.jar的情况下解决了这个问题。

第1步:set SQLNET.ALLOWED_LOGON_VERSION=8

第2步:改变

Connection conn = (Connection) DriverManager.getConnection("jdbc:oracle:thin:@server:port:sid", "username", "passwrd");
  

java.sql.Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@@server:port:sid", "username", "passwrd");

它会起作用!

答案 2 :(得分:2)

Oracle 11迁移到Oracle 12.后 在我的案例中,lib目录同时具有OJDBC14.jar和&amp; OJDBC8.jar删除旧的OJDBC14.jar后,它对我有用。

答案 3 :(得分:0)

迁移到ORACLE 12c后,我遇到连接数据库的问题。 错误是:java.sql.SQLException:ORA-28040:没有匹配的身份验证协议。 设置此参数后,SQLNET.ALLOWED_LOGON_VERSION = 8就解决了。

非常感谢

答案 4 :(得分:0)

如果要将应用程序迁移到ojdbc6,一个可能的原因是您的旧类(与旧的ojdbc版本兼容)可能无法获得类 OracleTypes 。最简单的方法是从import oracle.jdbc.driver.OracleTypes更改import语句;从您收到错误的类中导入oracle.jdbc.OracleTypes;

答案 5 :(得分:0)

我在Sqldeveloper(版本1.5.5)中获得了所有连接的ORA-28040。我设置了SQLNET.ALLOWED_LOGON_VERSION = 8,但是错误没有消失。然后,我在“工具”->“首选项”->“数据库”->“高级参数”下启用了“使用OCI /厚驱动程序”。做到了。

答案 6 :(得分:0)

  

主要问题是10g的JDBC瘦客户端使用   SHA-1身份验证协议,该协议在   12c,所以会出现错误。

在我的Oracle中,我找不到sqlnet.ora文件,因此必须使用以下命令创建它:

vi $ORACLE_HOME/network/admin/sqlnet.ora

我添加了以下内容:

SQLNET.ALLOWED_LOGON_VERSION=10
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10
SQLNET.ALLOWED_LOGON_VERSION_SERVER=10
SQLNET.ALLOWED_LOGON_VERSION=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.AUTHENTICATION_SERVICES = (NONE)

所以我不得不停止并启动监听器:

lsnrctl stop
lsnrctl start

最后,我重新启动数据库。

  

这应该只是一种解决方法

答案 7 :(得分:0)

当我们从11g迁移到12c时出现了此错误,我能够通过tnsping“ servername”获得正确的响应(这是我们需要通过cmd检查的第一步)。 此后,我们意识到可以启用数据库服务器以仅处理64位请求(在我的情况下,我使用的是WinSQL,并且它始终检查32位)。 因此,要解决此问题,请让管理员向eanble服务器发送32位请求,或者您可以转到对我有用的SQL Developer。