ORA-28040 数据库兼容性解决方案 没有匹配的验证协议

Oracle12c连接问题ORA-28040:没有匹配的验证协议的解决方案 Oracle数据库高版本服务兼容低版本客户端问题 

场景:

老版本的程序连接数据库,使用的是Oracle提供的OLEDB驱动来连接数据库的,同时主要是还使用Oracel Client 来连接到数据库。开始的表现为,NetManager各种配置配置正确,能够连接上Oracle12C 1.几的版本的数据库,但是因为甲方换了数据库版本,就需要做数据库迁移,就从Oracle12C 1.几的数据库服务迁移到Oracle12C 2.几的服务区,结果就出现了问题。
开始使用NetManager 的登录验证,报错提示:没有可用的监听。本来,完全可以通过装一个Oracle 12C对应数据库服务版本的Client 来绕开这个问题。但是程序支持持11g的客户端。重装数据库考虑到增加施工时间。所以就只能从设置上去想办法。

问题:

Oracle11g 客户端,链接Oracle12C 2.*数据库服务, 出现的版本不兼容问题
使用PLSQ报错Oracle12c连接问题ORA-28040:没有匹配的验证协议
使用NetManager 用户连接验证,提示找不到监听,大概监听配饰是正确且确认是开启的。

原因:

其实根本原因还是:版本不兼容 两个版本的jdk 版本不一致

方案:

1.修改Oracle的配置文件: 文件位于Oracle 服务端安装的根目录;
D:\app\oracle\product\12.1.0\dbhome_1\NETWORK\ADMIN
sqlnet.ora文件里面,盘符看具体的安装情况。

注意:由于装数据库的方式或者初始设置不同,这个文件不一定存在,但是可以自己手动创建。

 

2.在配置文件中添加如下语句:

SQLNET.ALLOWED_LOGON_VERSION_SERVER=8

SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

 

SQLNET.ALLOWED_LOGON_VERSION_SERVER控制可以连接到12c数据库的客户端版本(client —>orace 12c db
SQLNET.ALLOWED_LOGON_VERSION_CLIENT控制12c数据库可以连到哪些版本的数据库(orace 12c db —>其它版本的oracle db),例如:控制通过DB LINK可连接到哪些版本的oracle库。
该参数用来限制可以连接到数据库服务器上的最小客户端版本,比如设置值为10,即10g11g等以上客户端版本可以连接到数据库服务器上。在不是指的时候是用默认值的,导致低版本连接不上高版本的数据库。
说白了解决兼容性问题就是让高版本的额数据库服务也能让低版本的额数据库来连接。

 

3.重启需要连接这个数据库的客户端的LISTENER
不用重启数据库或者监听,也不用重启应用。

你有可能看到过这样的解决方案:
Oracle 12cdsqlnet.ora文件添加:SQLNET.ALLOWED_LOGON_VERSION=8
其实也是可以解决问题的,但由于这个参数在12c已经废弃了,而是用SQLNET.ALLOWED_LOGON_VERSION_CLIENTSQLNET.ALLOWED_LOGON_VERSION_SERVER代替。
如果继续使用该参数,会在告警日志中无穷无尽的报
“ Using deprecated SQLNET.ALLOWED_LOGON_VERSION parameter.”

如果是在Oracle用户(不是grid用户)下,将$ORACLE_HOME/network/admin/sqlnet.ora文件原来的SQLNET.ALLOWED_LOGON_VERSION=8注释掉(如果没有sqlnet.ora文件,那就创建一个。)

分析:

所以,该案例中主要起作用的是需要配置
SQLNET.ALLOWED_LOGON_VERSION_SERVER
SQLNET.ALLOWED_LOGON_VERSION_CLIENT

特别需要注意:
1)如果是RAC,因为RAC是使用grid的监听器,因此很多人以为是在“/app/12.1.0/grid/network/admin/sqlnet.ora” “SQLNET.ALLOWED_LOGON_VERSION_SERVER=8”,其实这是错的,而是仍然在$ORACLE_HOME/network/admin/sqlnet.ora“SQLNET.ALLOWED_LOGON_VERSION_SERVER=8”
2)上面所说的版本,是指dba_users.password_versions的版本。

 

ORA-28400错误是在使用kettle连接Oracle 19c数据库出现的错误。该错误表示没有找到与当前Kettle版本兼容的身份验证协议。 要解决这个问题,可以尝试以下几个可能的解决方法: 1. 升级Kettle版本:首先,确保你正在使用最新版本的Kettle。访问Pentaho官方网站,下载并安装最新版本的Kettle,有候新版本会修复旧版本的一些兼容性问题。 2. 检查JDBC驱动器:确认你正在使用适用于Oracle 19c的最新JDBC驱动器。访问Oracle官方网站,下载并安装与你的Oracle数据库版本相对应的JDBC驱动器。在Kettle的连接配置中,选择正确的驱动程序。 3. 设置Kettle系统属性:在Kettle的启动脚本中,可以添加一些系统属性来解决身份验证协议问题。打开Kettle的启动脚本(例如,“spoon.bat”或“spoon.sh”),在脚本的开头添加以下行: -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol -Djavax.net.ssl.trustStore=/path/to/your/truststore 将“/path/to/your/truststore”替换为你的信任库(truststore)的实际路径。保存并重新启动Kettle,看看问题是否已解决。 4. 检查数据库配置:确保在Kettle的连接配置中,填写了正确的数据库连接信息,包括主机名、端口号、数据库实例名、用户名和密码等。检查这些信息是否正确,特别是数据库实例名。 如果尝试了上述方法后仍然无法解决问题,可以尝试搜索类似的错误信息和解决方案,或者联系Kettle或Oracle的技术支持团队寻求帮助。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值