客户的一个ORACLE 9.2.0.6 RAC,两台SUN E4900,EMC DMX 1000磁盘阵列,2台服务器不在同一个机房,INTERCONNECT网卡、SAN连接均采用裸光纤连接,INTERCONNECT网卡在同一网段,使用VERITAS的VCS,CFS。不过PUBLIC网卡不在同一网段,中间经过了一个防火墙。
PUBLIC网卡经过路由和防火墙本来是不建议的方式,不过客户的特殊情况需要这样配置。在测试的时候,发现TAF无法成功,CLIENT的TNSNAMES.ORA中配置:
testdb=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 161.140.2.241)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 161.140.5.73)(PORT = 1521))
(LOAD_BALANCE = on)
)
(CONNECT_DATA =
(SERVICE_NAME = testdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 30)
(DELAY = 20)
)
)
)
测试过程中,发现一旦一个实例关闭,连接在上面的连接马上出现ORA-3113,连接没有被切换过去。由于只有一个ORA-3113错误信息,很难进行定位,因此为了定位问题,需要进行TRACE。
为了找到ORA-3113的原因,设置了CLIENT和服务器端的TRACE,在LISTENER的TRACE里没有发现任何有价值的信息。在CLIENT的TRACE有了比较重大的发现:
设置:
在SQLNET.ORA中设置:TRACE_LEVEL_CLIENT = 16
在TRACE文件中发现:
ntt2err: soc 10 error - operation=5, ntresnt[0]=517, ntresnt[1]=131, ntresnt[2]=0
[20-JUN-2008 21:43:39:294] ntt2err: exit
[20-JUN-2008 21:43:39:294] nttrd: exit
[20-JUN-2008 21:43:39:294] nsprecv: error exit
[20-JUN-2008 21:43:39:294] nserror: entry
[20-JUN-2008 21:43:39:294] nserror: nsres: id=0, op=68, ns=12547, ns2=12560; nt[0]=517, nt[1]=131, nt[2]=0; ora[0]=0, ora[1]=0, ora[2]=0
[20-JUN-2008 21:43:39:294] nsrdr: error exit
[20-JUN-2008 21:43:39:294] nsdo: nsctxrnk=0
[20-JUN-2008 21:43:39:294] nsdo: error exit
[20-JUN-2008 21:43:39:294] nioqper: error from nioqrc
[20-JUN-2008 21:43:39:294] nioqper: ns main err code: 12547
[20-JUN-2008 21:43:39:294] nioqper: ns (2) err code: 12560
[20-JUN-2008 21:43:39:294] nioqper: nt main err code: 517
[20-JUN-2008 21:43:39:294] nioqper: nt (2) err code: 131
[20-JUN-2008 21:43:39:294] nioqper: nt OS err code: 0
[20-JUN-2008 21:43:39:294] nioqer: entry
[20-JUN-2008 21:43:39:294] nioqer: incoming err = 12151
[20-JUN-2008 21:43:39:294] nioqce: entry
[20-JUN-2008 21:43:39:294] nioqce: exit
[20-JUN-2008 21:43:39:294] nioqer: returning err = 3113
从中可以看到ora-12547,ora-517,ora-131这三个错误信息,通过对这三个分析,最终发现问题出在 防火墙上。