shell 获取ora报错信息_关于Oracle12c连接认证协议问题--ORA-28040

概述

当数据库升级到12c后,有些功能的改变可能影响到原应用的可用性,如数据库升级12c后原来的10G或更老的客户端或10g或更老的JDBC 驱动连接数据库时失败,因为安全认证协议不符合,导致ORA-28040错误的发生,提示下面的错误信息:

  • ORA-28040: No matching authentication protocol error
  • ORA-03134: Connections to this server version are no longer supported

报错截图:

64e93d5e0a65dd8c395fbe3e338e6d58.png

思路:

ORACLE 12C R2中默认的认证协议是12, 即便是sqlnet.ora文件不存在默认值同样生效,12是一种区分大小写密码的认证,是一种新的认证协议,解决办法是创建或在现有的sqlnet.ora文件中增加参数sqlnet.allowed_logon_version_server,在12c以前的版本中解决方法同样也是在sqlnet.ora文件增加参数SQLNET.ALLOWED_LOGON_VERSION, 该参数在12c中以被sqlnet.allowed_logon_version_server 和sqlnet.allowed_logon_version_client替代, 如果在12c中配置了SQLNET.ALLOWED_LOGON_VERSION,会在DB ALERT 中出现“Using deprecated SQLNET.ALLOWED_LOGON_VERSION parameter”提示。

数据库的认证协议并不是数据库软件的版本, 对应的是dba_users.password_versions的值

使用下面的sql确认:

SELECT USERNAME, PASSWORD_VERSIONS FROM DBA_USERS ORDER BY 1;
11b0c77401cdf7fce1c79686aba5fb62.png

在11g中的密码版本10g和11g组合, 12c中密码版本是11g, 12c的组合,如果想使用10g的密码版本登录12.2数据库需要修改sqlnet.allowed_logon_version_server 到11或更低的值。sqlnet.allowed_logon_version_server 和sqlnet.allowed_logon_version_client配置的值是最小认证版本的值,如数据库是12c, sqlnet.allowed_logon_version_server=10, 那10g,11g,12c的client都可以访问,包含10g对应的JDBC驱动包。 sqlnet.allowed_logon_version_server是配置在数据库服务器(被访问端)的DB $ORACLE_HOME的sqlnet.ora(不是GI HOME),在12.2版本有效值应该是8,9,10,11,12,12A,当ALLOWED_LOGON_VERSION_SERVER的值设为12时,只有已经应用了关键补丁更新CPUOct2012或更高版本的客户端,或者具有等同更新的11.2.0.3客户端版本才能连接到服务器。


解决办法:

前置条件:已安装Oracle11g客户端,配置好环境变量,用PL/SQL Developer登录数据库

1、在oracle 12C服务器端$oracle_home/network/admin目录下 新建文件sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_SERVER=11 SQLNET.ALLOWED_LOGON_VERSION_CLIENT=11
af0d4487eecaccd56571ffd72481db6b.png

2、在服务器端,管理员身份登录,修改密码

 sqlplus / as sysdba alter session set container=服务名; alter user 服务名 identified by 密码;

注意:配置完服务器端的sqlnet.ora文件后,务必要重新修改密码,否则仍登录失败

e01decec9556be833bb35ae4daa08814.png

觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

b844cb1faec10b6fa64835f32fbf5506.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值