网站首页 > 技术文章 正文
最近安装了一套RHEL 7.2 x86-86的Oracle 12.2.0.1单机测试库,导完数据交给业务后,业务反馈使用PL/SQL Developer连接时报如下错误:
赶紧查了查MOS,原来在默认情况下Oracle 12.2对客户端版本有限制,主要是由sqlnet.ora中的以下两个参数控制:
SQLNET.ALLOWED_LOGON_VERSION_SERVER=n
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=n
这两个参数默认是11,表明默认只允许11g的客户端进行连接,考虑到很多PC端 plsql developer用的客户端都是10g,把这两个参数改为10:
SQLNET.ALLOWED_LOGON_VERSION_SERVER=10
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10
SQLNET.ALLOWED_LOGON_VERSION_CLIENT参数主要是当数据库作为dblink的客户端时使用,设置后无需重启监听和数据库就可以生效。对于RAC,Oracle读取的这两个参数是在RDBMS的ORACLE_HOME里,而不是GRID的ORACLE_HOME里。
解决完这个问题,有些客户端可以连接了,但是有些客户端报:ORA-01017: invalid username/password。于是我做了一些测试,发现在10.2.0.4版本的客户端连接会报ORA-01017,而10.2.0.5的版本可以正常连接,11.2.0.3、11.2.0.4和12.2.0.1的客户端也都没有问题,其它版本没有找到相关客户端,也就没有测试。
这里已经设置了10g客户端可以连接12.2的数据库,但为什么10.2.0.4的客户端还会报ORA-01017口令错误,而10.2.0.5客户端就可以连接。
经过检查,在Oracle 12c的数据库中(其实从11g开始就有了),dba_users视图上有个字段是password_versions,该值情况如下:
SQL>set linesize200
SQL>column username format a15
SQL>column account_status format a18
SQL>column default_tablespace format a25
SQL>column password_versions format a20
SQL>select username,account_status,default_tablespace,created,password_versions from dba_users where username='CRM';
USERNAME ACCOUNT_STATUS DEFAULT_TABLESPACE CREATED PASSWORD_VERSIONS
-------------------------------------------------------------------------------
CRM OPEN TBS_CRM_TS_S12017-06-0621:36:1911G12C
password_versions表明当前CRM用户口令的认证方式是11g和12c,所以10.2.0.4客户端连接出现了问题。那如何支持10g的认证方式呢,其实很简单,只要确认sqlnet.ora中的SQLNET.ALLOWED_LOGON_VERSION_SERVER和SQLNET.ALLOWED_LOGON_VERSION_CLIENT已经设置为10,然后使用alert user xxx identified by xxxxxx后,PASSWORD_VERSIONS就支持10g的认证方式了,如下:
SQL>set linesize200
SQL>column username format a15
SQL>column account_status format a18
SQL>column default_tablespace format a25
SQL>column password_versions format a20
SQL>select username,account_status,default_tablespace,created,password_versions from dba_users where username='CRM';
USERNAME ACCOUNT_STATUS DEFAULT_TABLESPACE CREATED PASSWORD_VERSIONS
-------------------------------------------------------------------------------
CRM OPEN TBS_CRM_TS_S12017-06-0621:36:1910G11G12C
所以整个问题的过程如下:在Oracle 12c上安装建库并迁移数据后,由于前期未设置SQLNET.ALLOWED_LOGON_VERSION_SERVER和SQLNET.ALLOWED_LOGON_VERSION_CLIENT为10,导致创建的用户不支持10g的口令认证方式。而修改这两个sqlnet参数后,数据库里用户的口令认证方式未发生变化,所以10.2.0.4客户端连接不上服务器,报ORA-01017。使用alert user xxx identified by xxxxxx修改口令后,由于sqlnet中的这两个参数已经修改为支持10g客户端的连接,所以dba_user中的password_versions也相应地修改为支持10g的认证方式,所以10.2.0.4版本的客户就可以连接数据库了。
所以当一些客户端是10.2.0.4的应用需要注意了,如果数据库服务器使用数据迁移的方式升级到Oracle 12c,需要注意在Oracle 12c中用户口令是否支持10g的认证方式,否则迁移后就报默名其妙的口令错误,10.2.0.5版本的客户端测试没有问题。
猜你喜欢
- 2024-11-05 吃透这份MySQL调优核心,面试可以横着走,奥利给
- 2024-11-05 软件测试员必备:面试时常问的15个MySQL数据库查询语句
- 2024-11-05 Spring-data-jpa入门 spring jpa入门
- 2024-11-05 Windows环境下19C一主二备的ABB架构的物理DG搭建
- 2024-11-05 centOS7 单机 mysql 5.7.24 主从 mysql主从命令
- 2024-11-05 颠覆你的认知!MySQL深度优化四件套:深度优化+面试集锦+思维导图
- 2024-11-05 面试官:有没用sysbench做过mysql的基准测试?
- 2024-11-05 第02期:单机部署以及从 MySQL 增量同步数据
- 2024-11-05 学习java需要什么软件 学java要下什么软件
- 2024-11-05 天猫面试官:你了解MySQL数据库设计和应用么?我人傻了
你 发表评论:
欢迎- 620℃几个Oracle空值处理函数 oracle处理null值的函数
- 612℃Oracle分析函数之Lag和Lead()使用
- 601℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 597℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 593℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 584℃【数据统计分析】详解Oracle分组函数之CUBE
- 574℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 562℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)