zoukankan      html  css  js  c++  java
  • 初探12C碰到的那些“坑”

    一个昏天黑地的早上,刚搭建的系统忽然遭遇严重数据库问题。于是,主要人物闪亮登场了,他们分别是友商人员小灰和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,以下是该列的官方文档说明:

    clip_image002

    默认情况下,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服务器端的数据库软件版本进行管控。

    clip_image004

    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

  • 相关阅读:
    Grid布局方式
    布局
    应用主题资源
    主题资源
    返回键
    标记 {x:Null},d:DesignWidth,d:DesignHeight
    WMAppManifest.xml
    项目模板
    Panorama和Pivot控件
    ashx页面中context.Session["xxx"]获取不到值的解决办法
  • 原文地址:https://www.cnblogs.com/nolanchan/p/9057338.html
Copyright © 2011-2022 走看看