Oracle Data Guard PING[ARC2]: Heartbeat failed to connect to standby ''. Error is 12514 故障分析


朋友搭建的一套DG,折腾了很长时间,一直都是报如下错误:

ORA-12514: TNS:listener does not currentlyknow of service requested in connect descriptor

PING[ARC2]: Heartbeat failed to connect tostandby 'PD'. Error is 12514.

这个错误最常见的原因,静态注册,再就是DG 参数的问题。

但这里参数,我也瞅了半天,并没有问题:

SQL> show parameter dest_2

NAME TYPE VALUE

----------------------------------------------- ------------------------------

db_create_online_log_dest_2 string

log_archive_dest_2 string SERVICE=PD VALID_FOR=(ONLINE_L

OGFILE,PRIMARY_ROLE) DB_UNIQUE

_NAME=PD

期间还让朋友做了很多的测试,包括重建口令文件,把DG 可能出现的问题,都想了一遍,还是有问题。

查看相关的进程:备库没有RFS进程,主库没有LNS进程。

SQL> select process, status, thread#,sequence#, block#, blocks from v$managed_standby;

PROCESSSTATUS THREAD# SEQUENCE#BLOCK# BLOCKS

--------- ------------ -------------------- ---------- ----------

ARCHCONNECTED 0 0 0 0

ARCHCONNECTED 0 0 0 0

ARCHCONNECTED 0 0 0 0

ARCHCONNECTED 0 0 0 0

后来让朋友再次tnsping PD看看,其实这个测试,在最开始的时候,我就已经让朋友测试过了。

tnsping 是正常的,也就是说,测试网络是通的,listener是正常的。 这个也是我们的tnsping 能干的工作,但是tnsping 不能检查tnsnames.ora 文件里的service_name或sid是否正确,所以也让朋友贴了这2个文件。

并用sqlplus 连接了这个配置,也正常。

问题看上去变得非常奇葩,因为DG本身就没几个参数,把我能想到的,问题都想了一遍,还有不通,后来看到朋友写的测试结果:

[oracle@DB11g_STtrace]$tnspingPD

TNSPingUtilityforLinux:Version11.2.0.1.0-Productionon31-JUL-201316:11:18

Copyright(c)1997,2009,Oracle.Allrightsreserved.

Usedparameterfiles:

UsedTNSNAMESadaptertoresolvethealias

Attemptingtocontact(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DB11g)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)))

OK(10msec)

对这里的HOST 产生了兴趣,之前怀疑过防火墙的问题,但防火墙是关闭的,所以让朋友把这里改成IP地址,居然OK了。

SQL> select process, status, thread#,sequence#, block#, blocks from v$managed_standby;

PROCESSSTATUS THREAD# SEQUENCE#BLOCK# BLOCKS

--------- ------------ -------------------- ---------- ----------

ARCHCONNECTED 0 0 0 0

ARCHCLOSING 1 156 2049 1600

ARCHCONNECTED 0 0 0 0

ARCHCONNECTED 0 0 0 0

RFSIDLE 0 0 0 0

RFSIDLE 0 0 0 0

RFSIDLE 0 0 0 0

RFSIDLE 1 157 27 1

这次查询,RFS进程也出现了。

朋友主备库的/etc/hosts 文件是直接复制过去的。 如下:

[root@DB11g_ST~]#more/etc/hosts

#Donotremovethefollowingline,orvariousprograms

#thatrequirenetworkfunctionalitywillfail.

127.0.0.1DB11glocalhost.localdomainlocalhost

192.168.0.89DB11g_ST

192.168.0.88DB11g

问题就出在这里,DB11g 这里有个回环地址:127.0.0.1。 后来朋友把这个注释掉,使用别名测试,也正常了。

在这个问题里面,饶了很大的一个圈子,之前我们一直围绕在数据库方面的思考,思考数据库方面的哪些配置会导致这个问题。直到最终发现问题的根源,是/etc/hosts的配置导致的。

昨天另一个朋友,也和我讲了另一个事情,他们有个物化视图,一直无法刷新,表才2G,也不算太大。 但就是刷新不了。 后来也是研究了很长的时间,最后定位出来是防火墙问题,里面有禁止大包的传送,把两边防火墙这个规则去掉就好了。

由这个故障的处理过程,我们要反思的是,在我们处理故障时候,不要总是局限在数据库这个层面,可能其他的配置,也会导致这个问题。在故障处理过程中,要想起拓展我们的思维,不要在自己的小巷思维里饶的太久了。

--------------------------------------------------------------------------------------------

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

QQ: 251097186

Skype: tianlesoftware

Email: [email protected]

Blog: http://blog.csdn.net/tianlesoftware

Weibo: http://weibo.com/tianlesoftware

Twitter: http://twitter.com/tianlesoftware

Facebook: http://www.facebook.com/tianlesoftware

Linkedin: http://cn.linkedin.com/in/tianlesoftware


你可能感兴趣的:(Oracle Data Guard PING[ARC2]: Heartbeat failed to connect to standby ''. Error is 12514 故障分析)