我们已将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>
不确定我们应该做些什么才能让应用程序正常运行。
答案 0 :(得分:4)
我最近在2个不同的应用程序中遇到了同样的错误:
提到的第二个解决方案 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。