Oracle-dblink使用不当
1. 故障现象
RAC集群上统计到会话数量相差非常大,而且每个数据库服务器节点发起的会话竟然高达400+。
-- 查询会话数信息 select /*+ rule */ inst_id,count(*) cnt from gv$session group by inst_id; select /*+ rule */ inst_id,username,machine,count(*) cnt from gv$session group by inst_id,username,machine order by 4;
2. 分析原因
1) 检查这些会话存在一个共同的地方是使用dblink,于是检查dblink的信息,发现使用dblink连接时首选了上面的一个连接串的实例,尽管加入load_balance参数也时,并不是预期的结果。
SELECT /*+ ORDERED */
S.KSUSEMNM "O_HOSTNAME",S.KSUSEPID "O_SPID",--操作dblink用户信息
G.K2GTITID_ORA "O_TXID",
S.INDX "S_SID",S.KSUSESER "S_SERIAL#",--dblink session信息
DECODE(BITAND(KSUSEIDL, 11),
1,
'ACTIVE',
0,
DECODE(BITAND(KSUSEFLG, 4096), 0, 'INACTIVE', 'CACHED'),
2,
'SNIPED',
3,
'SNIPED',
'KILLED') "S_STATUS",
S.KSUUDNAM "DBLINK_USER"
FROM SYS.X$K2GTE G, SYS.X$KTCXB T, SYS.X$KSUSE S
WHERE G.K2GTDXCB = T.KTCXBXBA
AND G.K2GTDSES = T.KTCXBSES
AND S.ADDR = G.K2GTDSES;-- dblink信息
3.处理方案
1)在应用程序端及时关闭dblink连接会话;
2)在数据库服务器上使用tnsnames.ora配置tns的方式修改dblink连接配置,并且将对应节点vip地址先于其它远端节点VIP写在上方。


浙公网安备 33010602011771号