一个昏天黑地的早上,刚搭建的系统忽然遭遇严重数据库问题。于是,主要人物闪亮登场了,他们分别是友商人员小灰和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. Murano Weekly Meeting 2015.08.25

    Meeting time: 2015.August.25th 1:00~2:00 Chairperson:  Serg Melikyan, PTL from Mirantis Meeting summ ...

  2. mysql中操作符LIKE与通配符%的使用

    mysql中通配符%用来通配其他字符,操作符LIKE用来查询字段中存在相同的字符 SELECT t.userId,t.cellphone,t.idNo,t.* FROM t_person t WHER ...

  3. pat1043. Is It a Binary Search Tree (25)

    1043. Is It a Binary Search Tree (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...

  4. 【蓝牙】蓝牙,调试 hcitool与gatttool实例

    Bluez协议栈在安装完以后,会提供两个命令行调试工具,hcitool与gattool,我们可以根据提供的工具来轻松的调试我们的蓝牙设备,调试BLE设备时,需要获取root权限. 蓝牙设备的开启与关闭 ...

  5. Python模块入门(二)

    一.模块的循环导入问题 在python工程中,由于架构不当,可能会出现模块间互相引用的情况.这时候需要通过一些方法来解决这个问题 1.重新设计架构,解决互相引用的关系. 2.把import语句放置在模 ...

  6. The twentieth day

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

  7. int **a 和 int (*a)[]的区别

    关于理论知识隔壁们的教程说的很详细了我就不多赘述了.我这边主要贴一段代码来看看这两种东西使用上的区别到底在哪. #include <stdio.h> int main(int argc, ...

  8. Go编程语言学习笔记

    go如何组织代码?它有一个工作空间的概念.所谓工作空间其实就是一个目录,其中包含三个子目录. src目录包含Go的源文件,它们被组织成包(每个目录都对应一个包), pkg目录包含包对象, bin目录包 ...

  9. ansible使用1-安装&配置

    参考文档 http://docs.ansible.com https://github.com/leucos/ansible-tuto 控制机安装 ansible控制机通过ssh控制远程主机,远程主机 ...

  10. vos对接时业务确认及信息安全责任承诺书

           业务确认及信息安全责任承诺书 双方达成一致,******网络科技有限公司向            有限公司提供中国移动网内语音线路接入服务,保证资源长期使用,保证线路资源接通率标 准,合 ...