故障分析:RAC环境下ORA-12545连接错误
崔华,网名 dbsnake
Oracle ACE Director,ACOUG 核心专家
分享一则由于SCAN IP导致的连接故障
11gR2 RAC两节点的环境,我本机用SCAN VIP连的时候发现连不上了,不断尝试多次,始终报同样的错误ORA-12545:
C:\Documents and Settings\cuihua>sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期四 5月 3 10:53:00 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
SQL> conn sys/oracle@nbsdev as sysdba;
ERROR:
ORA-12545: 因目标主机或对象不存在, 连接失败
nbsdev在我本机的tnsnames.ora中的配置为:
nbsdev =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.15.86)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = NBSDEV)
)
)
虽然连不上,但tnsping可以ping通,因为tnsping只检查IP地址和端口是否能连通,至于数据库实例状态,监听注册了哪些服务这些,它是不检查的:
C:\Documents and Settings\cuihua>tnsping nbsdev
TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 – Production on 03-5月 –
2012 10:43:00
Copyright (c) 1997, 2010, Oracle. All rights reserved.
已使用的参数文件:
C:\app\cuihua\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
已使用 TNSNAMES 适配器来解析别名
尝试连接 (DESCRIPTION = (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.15.86)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = NBSDEV)))
OK (30 毫秒)
如下是NBSDEV在database server端的相关设置:
grid:/nbsdu01/app/11.2/network/admin>cat /etc/hosts
# @(#)47 1.2 src/bos/usr/sbin/netstart/hosts, cmdnet, bos61D, d2007_49A2 10/1/07 13:57:52
省略显示相关内容……
#RAC
10.1.15.64 P550-05-LA
10.1.15.84 P550-05-LA-vip
9.2.1.64 P550-05-LA-priv
10.1.15.65 P550-05-LB
10.1.15.85 P550-05-LB-vip
9.2.1.65 P550-05-LB-priv
10.1.15.86 nbsdev-scan
现在的状况是看起来一切正常,但就是连不上。
我们来仔细检查一下SCAN Listener的状况:
从上述结果里我们可以看到,现在节点2上面的NBSDEV2的Handler的状态为blocked且HOST地址错了――这里HOST地址明显应该是10.1.15.85。
我们登陆一下节点2,看一下local listener的状态:
从结果里可以看到,实例NBSDEV2的动态注册并没有成功,只有ASM实例,这个不对。
我们重启一下节点2上的local listener:
重启完后现在的状态就对了:
再次回到节点1,现在我们再来看一下SCAN Listener的状态:
从结果里我们可以看到,现在NBSDEV2的Handler的状态已经变成了ready且HOST地址也变成了10.1.15.85。
再次在我本机上尝试连接NBSDEV,刚才的报错ORA-12545已不复存在,我们又可以连上了:
SQL> conn sys/oracle@nbsdev as sysdba;
已连接。
从整个诊断过程来看,在用SCAN VIP连接的时候,Oracle似乎是在我反复尝试的情况下,始终都将我的连接redirect到节点2上,又因为节点2在SCAN Listener上注册的HOST地址不对,所以Oracle这里报错“ORA-12545: 因目标主机或对象不存在, 连接失败”,这个跟我心目中SCAN VIP的原理不太一样。节点2有问题,你就让我连节点1好了,干嘛要在我反复尝试的情况下始终报错ORA-12545呢?
现在我们手工把节点2上的local listener停掉:
再次回到节点1,查看一下SCAN Listener的状态:
从上述结果里我们可以看到,当我把节点2上的local listener停掉后,节点1上SCAN Listener中节点2对应的Handler的状态已经变成了blocked,但此时HOST地址是对的。
从如下结果我们可以看到——虽然节点1上SCAN Listener中节点2对应的Handler的状态已经变成了blocked,但因为HOST地址是对的,所以当我在本机以SCAN VIP连接的时候还是可以连上,Oracle这里正确的将我的连接redirect到了节点1上:
----the end
如何加入"云和恩墨大讲堂"微信群
搜索 盖国强(Eygle)微信号:eyygle,或者扫描下面二维码,备注:云和恩墨大讲堂,即可入群。每周与千人共享免费技术分享,与讲师在线讨论。
关注本微信(OraNews)回复关键字获取
2016DTCC, 2016数据库大会PPT;
DBALife,"DBA的一天"精品海报大图;
12cArch,“Oracle 12c体系结构”精品海报;
DBA01,《Oracle DBA手记》第一本下载;
YunHe,“云和恩墨大讲堂”案例文档下载;