现象在DB上执行sqlplus apps/apps正常,如果执行sqlplus apps/apps@prod1 就会出现ORA-12516的错误。
SQLNet.log中的日志:
Fatal NI connect error 12516, connecting to:
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=compardrac1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PROD)(INSTANCE_NAME=PROD1)(CID=(PROGRAM=sqlplus@compardrac2)(HOST=compardrac2)(USER=oraprod))))
VERSION INFORMATION:
TNS for Solaris: Version 10.2.0.5.0 - Production
TCP/IP NT Protocol Adapter for Solaris: Version 10.2.0.5.0 - Production
Time: 07-JUN-2012 00:50:51
Tracing not turned on.
Tns error struct:
ns main err code: 12564
TNS-12564: TNS:connection refused
ns secondary err code: 0
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
怎么看怎么都不像是Processes不足,lsnrctl status listener_compardrac1也看不出问题来,最后查看listener的service(lsnrctl service listener_compardrac1)发现PROD1对应的是compardrac2vip,从日志里面也可以看出来,Host=compardrac1,但是后面CID里面的信息却是compardrac2,看来是listener handle的Instance信息有错。
回想到DB之间是做了loading_balance的,启动的时候crs_start -all,两边的listener起的快,instance起的慢,listener Handle的时候给串了。知道原因就好办了,把RAC服务一台一台的启动就可以避免这个问题。