首页 > 数据库 > 数据库开发技术 > 好激动好紧张,美女测试人员说她会今夜无眠
是被标题吸引过来的吧。。。。^_^
我写了一篇关于项目组同事反馈一单机多实例Oracle 19C库因sqlnet.ora设置导致sqlplus无法登陆数据库的问题,前文最后提到一生产RAC库也遇到类似问题,本文作为上文的接续,请听我娓娓道来。
事情是这样的,一套Oracle RAC 19C 三节点主库,由于应用程序访问量较大,导致主库数据库负载每日都比较高,为减轻该主库负载压力,另搭建了一套三节点19C RAC备库,备库的硬件配置虽不及主库,但整体配置也相对比较高。备库实时同步主库数据,当前未有应用接入进来。
为减轻主库压力,在和项目组沟通后,梳理了相关业务,对于BI等对实时性要求不是特别高的应用计划调整连接到备库。其中有部分应用不是直连19C数据库,而是通过一个中间库使用dblink连接19C主库的,现在需调节该DBLINK的目标端IP,将其IP修改为Oracle 19C RAC备库所对应的VIP。但在修改了dblink中的IP后,应用测试发现无法正常连接备库,报了如下错误。
SQL> drop database link XXX.XXXX;Database link dropped.SQL> CREATE DATABASE LINK "XXX.XXXX" CONNECT TO "XXX" IDENTIFIED BY "XXX" USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.xxx.xxx)(PORT = xxxx))) (CONNECT_DATA = (SERVICE_NAME = xxx.xxxx) (INSTANCE_NAME = xxxx)))';Database link created.SQL> select * from dual@XXX.XXXX;select * from dual@XXX.XXXX*ERROR at line 1:ORA-01017: invalid username/password; logon deniedORA-02063: preceding line from XXX.XXXX

直接登陆该19C RAC备库,验证用户名和密码,也无法正常登陆,报错如下:
SQL> conn xxxx/xxxxxERROR:ORA-01017: invalid username/password; logon denied
查询当前RAC备库模式及状态也都是正常的,如下所示:
select status from v$instance;STATUS------------OPENSQL> select open_mode,database_role,protection_mode from v$database;OPEN_MODE DATABASE_ROLE PROTECTION_MODE-------------------- ---------------- --------------------READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM PERFORMANCE

使用该测试用户是可以正常登陆19C RAC主库的,那问题出现在哪呢?
通过测试用户可以正常通过conn 来登陆19C RAC 主库,但在备库上却无法正常登陆,究竟是哪地方出现问题呢,是我当时部署RAC DG的时候有什么误操作和遗漏的操作吗,回想下,和之前的部署没什么区别啊,用的都是我之前写的部署方案。
在这套RAC 备库上无法通过conn 登陆主库,那是否也同样无法在主库的其它单机备库上登陆呢,于是,使用该测试账号登陆RAC 主库的其中一套单机19C备库,发现使用conn xxx/xxx可以正常连接该单机备库。
conn xxx/xxxxConnected.select status from v$instance;STATUS------------OPENSQL> select open_mode,database_role,protection_mode from v$database;OPEN_MODE DATABASE_ROLE PROTECTION_MODE-------------------- ---------------- --------------------READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM PERFORMANCE

由此看来不是该测试用户的用户名和密码问题导致的。
此时查看了下该单机备库的$ORACLE_HOME/network/admin目录,再和那套RAC备库的同目录做了对比,发现单机备库多了sqlnet.ora,而那套RAC备库的 $ORACLE_HOME/network/admin目录是没有设置sqlnet.ora,会不会是sqlnet.ora问题导致的呢,于是我做了如下测试,将该单机备库的sqlnet.ora文件修改了后缀名,并再测试conn连接是否正常,测试及结果如下:
~]$ cd $ORACLE_HOME/network/adminadmin]$ lltotal 161 oracle oinstall 283 Jul 15 14:50 listener.ora2 oracle oinstall 64 Apr 17 2019 samples1 oracle oinstall 1536 Feb 14 2018 shrept.lst1 oracle oinstall 135 Jul 25 11:37 sqlnet.ora1 oracle oinstall 697 Jul 19 13:44 tnsnames.oraadmin]$ mv sqlnet.ora sqlnet.ora_bakadmin]$ sqlplus xxx/xxx: Release 19.0.0.0.0 - Production on Mon Nov 28 11:55:42 2022Version 19.15.0.0.0Copyright (c) 1982, 2022, Oracle. All rights reserved.ERROR:: invalid username/password; logon deniedEnter user-name:ERROR:: invalid username/password; logon deniedEnter user-name: ^Cadmin]$ mv sqlnet.ora_bak sqlnet.oraadmin]$ sqlplus xxx/xxx: Release 19.0.0.0.0 - Production on Mon Nov 28 11:56:01 2022Version 19.15.0.0.0Copyright (c) 1982, 2022, Oracle. All rights reserved.Last Successful login time: Sat Oct 15 2022 10:20:03 +08:00Connected to:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - ProductionVersion 19.15.0.0.0

通过以上实验可以看到,当$ORACLE_HOME/network/admin下sqlnet.ora不存在,是无法正常通过conn 来连接备库。
查看了下该sqlnet.ora文件里配置的内容,详细信息如下:
[oracle@xxxx admin]$ cat sqlnet.oraSQLNET.ALLOWED_LOGON_VERSION_SERVER=10SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10sqlnet.expire_time=10SQLNET.INBOUND_CONNECT_TIMEOUT=180

四、问题处理
于是参照该单机备库,在RAC DG 备库$ORACLE_HOME/network/admin目录下,创建了sqlnet.ora文件并设置了同样内容,此时使用测试账号和密码使用conn也能正常连接该RAC备库。
在BI连接RAC 备库的中间件重新测试dblink也可以正常连接19C RAC备库了。
对于Oracle 的监听配置,看似简单,其实却隐藏着很多知识,这部分知识还是需要好好摸索学习的。
===========================================================
欢迎关注我视频公众号和微信公众号,后面将为大家带来更多精彩内容


原文作者:尚雷的驿站;如有侵权,请联系管理员删除。