一个昏天黑地的早上,刚搭建的系统忽然遭遇严重数据库问题。于是,主要人物闪亮登场了,他们分别是友商人员小灰和DBA小Y。

事情的开始,小Y接到小灰紧急救助电话...

小灰:小Y,我是友商的小灰,刚搭建的XX系统数据库连接不上,请多帮忙。

Y好,我看看。

放下电话后,小Y发现不对劲……

Y小灰,我能连得上哦。你再试试看。

小灰:好,我连连看。

5分钟过去了……

Y小灰,怎么样?

小灰:奇怪,我怎么连不上哩?

Y用什么版本的客户端?有无报错提示信息?

小灰:我用的是11g的客户端。连接的时候有28040的报错。

Y好,我看看。

放下电话后,小Y查了一下28040的报错究竟是什么鬼,以下是官方对这报错的解释:

$ oerr ora 28040

28040, 0000, "No matching authentication protocol"

// *Cause: There was no acceptable authentication protocol for

// either client or server.

// *Action: The administrator should set the values of the

// SQLNET.ALLOWED_LOGON_VERSION_SERVER and

// SQLNET.ALLOWED_LOGON_VERSION_CLIENT parameters, on both the

// client and on the server, to values that match the minimum

// version software supported in the system.

// This error is also raised when the client is authenticating to

// a user account which was created without a verifier suitable for

// the client software version. In this situation, that account's

// password must be reset, in order for the required verifier to

// be generated and allow authentication to proceed successfully.

知道处理方法后,小Y在<GRID_HOME>/network/admin/sqlnet.ora中增加了以下两行代码并reload监听:

SQLNET.ALLOWED_LOGON_VERSION_SERVER=8

SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

就这样,10分钟过去了……

Y小灰,我改了些配置,现在应该能连得上了,你再试试看。

小灰:好,我连连看。

5分钟过去了……

小灰:小Y,能连得上了。

Y好的,有问题再联系我。

又过去了10分钟……

小灰:小Y,还有部分人连不上……

Y用什么版本的客户端?有无报错提示信息?

小灰:11g的客户端,有01017的报错,但确认密码是对的。

Y是不是用简易客户端?

小灰:是哒。

Y重新安装一下客户端,不要用简易客户端,要用安装版的。

小灰:好,我试试。

过去了30分钟……

Y小灰,怎么样了?

小灰:可以连得上了。

过去了1小时……

小灰:小Y,又有部分人连不上……这次是10g的客户端,有01017的报错,但确认密码是对的。

Y好,我看看。

放下电话后,小Y纳闷了……是不是有地方配置漏改了?看了一下,dba_users视图,发现了一个新增的列PASSWORD_VERSIONS,以下是该列的官方文档说明:

默认情况下,password_versions的值为11g 12c。然后小Y把用户密码重置了一下,password_versions的值为10g 11g 12c。

Y小灰,现在可以了,再试试。

小灰:好。

5分钟过去了,问题终于解决……

小灰:小Y,可以了。

Y好哒。

总结:

1. 12c通过sqlnet.ora通过参数SQLNET.ALLOWED_LOGON_VERSION、SQLNET.ALLOWED_LOGON_VERSION_SERVER和SQLNET.ALLOWED_LOGON_VERSION_CLIENT三个参数对连接orcale服务器端的数据库软件版本进行管控。

2. oracle通过sqlnet文件中的参数对用户密码的校验算法进行优化。如:

SELECT USERNAME,PASSWORD_VERSIONS FROM DBA_USERS;

USERNAME PASSWORD_VERSIONS

------------------------------ -----------------

JONES 10G 11G 12C

ADAMS 10G 11G

CLARK 10G 11G

PRESTON 11G

BLAKE 10G

PASSWORD_VERSIONS列表示的为oracle数据库用户的密码算法,其中,10g代表10g以及更早版本的case-insensitive算法,11g代表基于SHA-1算法,12c代表基于SHA-2和SHA-512算法。

通过上述例子说明:

· 用户jones: 该密码在Oracle Database 12c release 12.1版本且在SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8 的情况下创建用户或者修改密码。

· 用户 adamsclark: 这两个用户在10g的客户端进行创建,在11g的客户端下重置过密码,且SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8 。

· 用户 preston: 该用户在 Exclusive 模式下通过11g客户端进行创建,且SQLNET.ALLOWED_LOGON_VERSION = 12。

· 用户 blake: 该用户一直是用oracle10g客户端创建、重置密码等操作。

3. 在各大客户中,由于系统架构复杂,涉及的合作伙伴众多,所牵涉的问题较多,为减少各种各样的问题,提高系统的稳壮性、兼容性,建议在安装完oracle 12C服务器端后,对sqlnet.ora文件增加以下参数

SQLNET.ALLOWED_LOGON_VERSION=8

SQLNET.ALLOWED_LOGON_VERSION_SERVER=8

SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

初探12C碰到的那些“坑”的更多相关文章

  1. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  2. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(四)——对 run.py 的调整

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  3. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  4. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  5. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  6. 聊聊用Selenium做自动化碰到了哪些坑?都是怎么解决的?

    本周我们的讨论话题是关于Selenium自动化: 话题:聊聊用Selenium做自动化碰到了哪些坑?都是怎么解决的? 话题描述:Selenium是大家做UI自动化用到的主流框架,在平时写脚本的过程中, ...

  7. JDBC 连接 MySQL 时碰到的小坑

    最近从MS SQL Server换到了MySQL,已经是8.11版本了,安装的时候似乎还用了新的身份认证方式之类的,连接过程中也是磕磕绊绊,碰到很多奇奇怪怪的问题,在此记录下来. 驱动加载: 以前使用 ...

  8. babel/core 6.x升级到7.x要碰到的一些坑

    刚学习react.js没多久,碰到各种坑.就比如这个问题,弄了我3个小时,终于解决了.其实就是一个小问题. 报错信息: Error: Cannot find module '@babel/core' ...

  9. 项目分享一:在项目中使用 IScroll 所碰到的那些坑

    最近做了个 WEB APP 项目,用到了大名鼎鼎的 IScroll,滚动的效果的确很赞,但是坑也是特别多,下面总结一下,希望自后来者有帮助. 该项目现已开源在 github 上,https://git ...

随机推荐

  1. maven实战迷你版记录

    1.  ~/.m2 文件 默认情况下,该文件夹下放置了 Maven 本地 仓库.m2/repository.所有的 Maven 构件(artifact)都被存储到该仓库中,以方便重用. 默认情况下,~ ...

  2. fetch技术

    Snandy If you cannot hear the sound of the genuine in you, you will all of your life spend your days ...

  3. WCF:无法满足对安全令牌的请求,因为身份验证失败。

    服务端和客户端如果有认证的话的这样: <wsHttpBinding> <binding name="WSHttpBinding_IService1" closeT ...

  4. 特殊的流程控制语句break continue exit

    break语句可以结束当前的for.foreach.while.do-while.或者switch的执行. for($i=1; $i<10; $i++) { if($i == 5) { echo ...

  5. XHML教会我的一些东西-4

    今天把“河畔林语”的项目看完了.我自己也试着做了一下,这算是自己写的第一个项目吧.虽然全部是模仿,而且经常一边看写好的一边自己写,还是自己不够成熟呀. 不知道为什么,我用我的电脑进http://www ...

  6. The twentieth day

    Knowledge is power 知识就是力量 You're unique,nothing can replace you.你举世无双,无人可以替代.

  7. Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令

    Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中. 利 ...

  8. CAD鼠标移动到对象时显示对象内容

    //定义事件         Editor ed = doc.Editor;         ed.PointMonitor += new PointMonitorEventHandler(ed_Po ...

  9. 安装BI Publisher Desktop报错:“Template Builder Installer Failed:Unexpected Error”

    原因:office的版本未安装正确,应该安装X86版本的,如果是X64的会出现,重新安装X86版本的office后解决问题.

  10. JUnit4 学习笔记

    一.环境搭建: 1.需要用的包: JUnit4.7:http://files.cnblogs.com/files/ShawnYang/junit4.7.zip hamcrest-1.2:http:// ...