环境: Oracle 11.2.0.1 RAC AXI 6.3
情况:工具通过INSRT INTO TAB1@DB_LINK SELECT * FROM TAB_B往插入数据时,HAND住,会话事件为DFS lock handle,DB_LINK为本地实例,且TAB2表中有clob字段。
1.在使用程序导入深圳数据时,会话hang,以下sql模拟出当时hang住情形.
select sid from v$mystat where rownum =1; --确认会话sid
insert into tab1@db_link select * from tab2; --产生回环问题sql
2.确认产生DFS lock handle事件
select sid,username,event from v$sessoin where sid =&sid;
3.查看会话请求锁的name和mode
select chr(bitand(p1,-16777216)/16777215) || chr(bitand(p1, 16711680)/65535) "Lock",
to_char(bitand(p1, 65536)) "Mode",
p2, p3 , seconds_in_wait
from v$session_wait
where event = ‘DFS lock handle’;
--发现是name :DX mode:5
4.通过锁资源查看是否被其他会话占用
select inst_id, sid, type, id1, id2, lmode, request, block
from gv$lock where type='DX' and id1=&id1 and id2=&id2;
--发现并无存在DX锁,至此,可以推断是又Oracle bug引起.
References
BUG:10282287 - RAC / LOOPBACK CONNECTION / LOB ACCESS / HANG : SQL*NET MORE DATA TO CLIENT
BUG:11736004 - INSERT BY SELECTING CLOB DATA LARGER THAN 32K OVER LOOKBACK DATABASE LINK HANGS
5.通过修改隐含参数规避此bug
sqlplus / as sysdba
alter system set "_clusterwide_global_transactions"=false scope=spfile;
6.重起两个节点实例,使参数生效.
7.执行sql验证,成功执行.
insert into tab1@db_link select * from tab2;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22990797/viewspace-1335041/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22990797/viewspace-1335041/