随着Oracle 12C 18C 19C 20C 的推出大家在核心或者非核心数据库开始升级,以保证数据库的安全性和稳定性,但在数据库升级后用旧版本的JDBC或者Oracle客户端访问数据库的时候会出现无法登陆,ORA-28040 0RA-03134报错问题,此次设计三个参数12C以前的参数ALLOWED_LOGON_VERSION 及12C 开始使用的新参数ALLOWED_LOGON_VERSION_SERVER/ALLOWED_LOGON_VERSION_CLIENT本章我们节点说明一下其中的缘由,希望可以为大家解惑!
低版本的数据库(11G及以下)的JDBC或者客户端访问高版本的数据库(12C及以上)报错信息
ORA-28040: No matching authentication protocol error
ORA-03134: Connections to this server version are no longer supported
原因:
我们先引入参数:
SQLNET.ALLOWED_LOGON_VERSION=9
该参数是在Oracle 下的Oracle_HOME/network/admin/sqlnet.ora 文件中调整。
该参数在这里的意思是版本9及以上将允许登录。上述参数允许9i、10g和11个版本访问数据库。版本8i在“ORA-28040:没有匹配的身份验证协议”时会失败。
如果我们选择了SQLNET.ALLOWED_LOGON_VERSION = 10,意思允许10g和11g版本访问数据库。对于ORA-28040, 9i和8i版本将失败。
在Oracle数据库12c中不在使用ALLOWED_LOGON_VERSION参数,改为两个新的Oracle Net服务参数:
SQLNET.ALLOWED_LOGON_VERSION_SERVER=n
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=n
在 12.1版本中,新参数的默认设置是11。任何试图连接的客户端都必须是11G 及以上,除非在服务器端sqlnet中显式设置了这些参数,否则应该使用version 11或更高版本。
在 12.2版本,SQLNET的默认值ALLOWED_LOGON_VERSION_SERVER设置在12.2中从11更改为12。如果您的客户端不超过11.2.0.3或包含CPUOCT2012补丁,这就是我们把数据库升级到12C,大家高频率出现该问题的原因。
注意:建议该参数调整成8或者9等当前环境的最低版本
注意:SQLNET.ORA 文件下,当数据库充当客户端时,服务器上需要使用ALLOWED_LOGON_VERSION_CLIENT。比如在dblink的使用情况下。在此更改之后,我们不需要重新启动侦听器或数据库。
具体说明如下链接:
https://docs.oracle.com/database/121/NETRF/sqlnet.htm#NETRF2010