随着Oracle 12C 18C 19C 20C 的推出,很多单位已经开始升级现有的低版本数据库,同时新上线的系统也按照部署到Oracle 19C 上,以次跟进Oracle 的软件更新迭代。但在数据库升级后用我们会在新版本和旧版本的回访上开始出现问题,我们这里主要说一下通过JDBC或者Oracle客户端访问数据库的时候会出现如下报错,
ORA-28040: No matching authentication protocol error.
ORA-03134: Connections to this server version are no longer supported error.
报错问题,此次涉及三个参数,在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 文件中调整。
该参数在这里的意思是authentication protocol 版本9及以上将允许登录。上述参数允许9i、10g和11G版本访问数据库。数据库版本如果是8i 就会报如下错误“
ORA-28040: No matching authentication”。
如果我们选择了SQLNET.ALLOWED_LOGON_VERSION = 10,意思允许10g和11g版本访问数据库,9i和8i版访问将失败。
在Oracle数据库12c中不在使用ALLOWED_LOGON_VERSION参数,改为两个新的Oracle Net服务参数:
SQLNET.ALLOWED_LOGON_VERSION_SERVER=n
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=n
Oracle 官方文档对该参数的解释分别是:
To set the minimum authentication protocol allowed when connecting to Oracle Database instances.
To set the minimum authentication protocol allowed for clients, and when
a server is acting as a client, such as connecting over a database
link, when connecting to Oracle Database instances.
在 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的使用情况下。在此更改之后,我们不需要重新启动侦听器或数据库。
具体说明如下链接: