客户端访问scan IP出现ora12545错误

来源:互联网 发布:mac怎么玩dota2国服 编辑:程序博客网 时间:2024/06/06 01:26

   现场环境是oracle linux 5.7下一个双节点版本为11.2.0.4的rac集群,运行着3个数据库,有3个scan ip。

在使用过程中发现使用scan ip连接其中一个数据库服务名时经常出现oracle TNS-12545:因目标主机或对象不存在的错误,有时又能访问。使用该scan ip访问其他两个数据库服务名完全正常,未出现12545错误。随即通过vip地址尝试访问有问题的数据库,测试正常,同样未出现12545错误,判断问题与scan监听有关。

查看scan监听状态

[grid@db2 ~]$ lsnrctl status listener_scan2


LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 27-NOV-2016 13:04:40


Copyright (c) 1991, 2013, Oracle.  All rights reserved.


Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))
STATUS of the LISTENER
------------------------
Alias                     listener_scan2
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                27-NOV-2016 12:34:08
Uptime                    0 days 0 hr. 30 min. 31 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/db2/listener_scan2/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN2)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.138.129.3)(PORT=1521)))
Services Summary...
Service "CAIWUXDB" has 1 instance(s).
  Instance "CAIWU1", status READY, has 1 handler(s) for this service...
Service "RLZY" has 2 instance(s).
  Instance "RLZY1", status READY, has 1 handler(s) for this service...
  Instance "RLZY2", status READY, has 1 handler(s) for this service...
Service "RLZYXDB" has 2 instance(s).
  Instance "RLZY1", status READY, has 1 handler(s) for this service...
  Instance "RLZY2", status READY, has 1 handler(s) for this service...
Service "caiwu" has 1 instance(s).
  Instance "CAIWU1", status READY, has 1 handler(s) for this service...
Service "chdyl" has 1 instance(s).
  Instance "chdyl1", status READY, has 1 handler(s) for this service...
Service "chdylXDB" has 1 instance(s).
  Instance "chdyl1", status READY, has 1 handler(s) for this service...
The command completed successfully

   从监听的状态来看,监听正常,为进一步找到问题所在,我们测试连接listener_scan2监听对应的scan ip(可通过srvctl status scan和srvctl status scan_listener获知),然后查看监听日志,监听日志在/u01/app/grid/diag/tnslsnr/db2/listener_scan2/alert/中,但建议查看/u01/app/grid/diag/tnslsnr/db2/listener_scan2/trace中的文件,发现连接的时候
监听日志出现TNS-01184及TNS-01185错误:

27-NOV-2016 12:42:12 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=root))(SERVICE_NAME=RLZY)) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.138.130.62)(PORT=35885)) * establish * RLZY * 0
27-NOV-2016 12:42:16 * service_update * chdyl1 * 0
Sun Nov 27 12:42:17 2016
27-NOV-2016 12:42:17 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=root))(SERVICE_NAME=RLZY)) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.138.130.62)(PORT=35888)) * establish * RLZY * 0
27-NOV-2016 12:42:19 * service_update * RLZY2 * 0
27-NOV-2016 12:42:19 * service_update * RLZY1 * 0
27-NOV-2016 12:42:22 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=root))(SERVICE_NAME=RLZY)) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.138.130.62)(PORT=35891)) * establish * RLZY * 0
27-NOV-2016 12:42:23 * service_register * RLZY * 1184
TNS-01184: Listener rejected registration or update of service handler "DEDICATED"
 TNS-01185: Registration attempted from a remote node
27-NOV-2016 12:42:23 * service_died * RLZY * 12537

     上google一查,该错误一般是在11.2.0.2及下版本出现,原因是是local_listener中的参数设置的主机名,需要改为该节点的VIP地址,但我这里不应该属于这种情况,但还是查看下,结果还真发现问题,虽然数据库的local_listener参数使用的是vip地址,但节点2的local_listener参数却是空:

节点2:


SQL> show parameter local_listener


NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener     string




节点1:
SQL> show parameter local_listener


NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener     string (ADDRESS=(PROTOCOL=TCP)(HOST=
10.138.129.103)(PORT=1521))




设置节点的vip为监听地址:
SQL> alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=10.138.129.104)(PORT=1521))'  scope=both sid='RLZY2';


System altered.


SQL> alter system register;


System altered.


设置后查看:
SQL> show parameter local_listener


NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener     string(ADDRESS=(PROTOCOL=TCP)(HOST=1
0.138.129.104)(PORT=1521))


     通过设置后,经过测试再无TNS-12545错误,问题得到解决,但为什么节点2的local_listener为空就莫名其妙了。
1 0