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.*数据库服务,出现的版本不兼容问题
如何连接oracle数据库使⽤PLSQ报错Oracle12c连接问题ORA-28040:没有匹配的验证协议
使⽤NetManager ⽤户连接验证,提⽰不到监听,⼤概监听配饰是正确且确认是开启的。
原因:
其实根本原因还是:版本不兼容两个版本的jdk 版本不⼀致
⽅案:
1.修改Oracle的配置⽂件:⽂件位于Oracle 服务端安装的根⽬录;
D:\app\oracle\product\12.1.0\dbhome_1\NETWORK\ADMIN
的 a⽂件⾥⾯,盘符看具体的安装情况。
注意:由于装数据库的⽅式或者初始设置不同,这个⽂件不⼀定存在,但是可以⾃⼰⼿动创建。
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,即10g,11g等以上客户端版本可以连接到数据库服务器上。在不是指的时候是⽤默认值的,导致低版本连接不上⾼版本的数据库。
说⽩了解决兼容性问题就是让⾼版本的额数据库服务也能让低版本的额数据库来连接。
3.重启需要连接这个数据库的客户端的LISTENER:
不⽤重启数据库或者监听,也不⽤重启应⽤。
你有可能看到过这样的解决⽅案:
在Oracle 12c中d的a⽂件添加:SQLNET.ALLOWED_LOGON_VERSION=8
其实也是可以解决问题的,但由于这个参数在12c已经废弃了,⽽是
⽤SQLNET.ALLOWED_LOGON_VERSION_CLIENT和SQLNET.ALLOWED_LOGON_VERSION_SERVER代替。
如果继续使⽤该参数,会在告警⽇志中⽆穷⽆尽的报
“ Using deprecated SQLNET.ALLOWED_LOGON_VERSION parameter.”
如果是在Oracle⽤户(不是grid⽤户)下,将$ORACLE_HOME/network/a⽂件原来
的SQLNET.ALLOWED_LOGON_VERSION=8注释掉(如果没有a⽂件,那就创建⼀个。)
分析:
所以,该案例中主要起作⽤的是需要配置
SQLNET.ALLOWED_LOGON_VERSION_SERVER
SQLNET.ALLOWED_LOGON_VERSION_CLIENT
特别需要注意:
(1)如果是RAC,因为RAC是使⽤grid的,因此很多⼈以为是在“/app/12.1.0/grid/network/a”
加“SQLNET.ALLOWED_LOGON_VERSION_SERVER=8”,其实这是错的,⽽是仍然
在$ORACLE_HOME/network/a加“SQLNET.ALLOWED_LOGON_VERSION_SERVER=8”
(2)上⾯所说的版本,是指dba_users.password_versions的版本。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论