数据库是rac环境,开发人员创建了十几个库都需要来回调用,所以要dblink,原来的厂家都是单机情况没有用过集群,所以没出过这个问题,不幸被遇上了。
DISTRIB TRAN LES.f3da61c5.521.33.2082
is local tran 521.33.2082 (hex=209.21.822)
insert pending committed tran, scn=6396313189 (hex=1.7d3ffe65)
Mon Aug 17 16:39:21 2020
DISTRIB TRAN LES.f3da61c5.521.33.2082
is local tran 521.33.2082 (hex=209.21.822))
delete pending committed tran, scn=6396313189 (hex=1.7d3ffe65)
DISTRIB TRAN LES.f3da61c5.468.1.4492
is local tran 468.1.4492 (hex=1d4.01.118c)
insert pending committed tran, scn=6396314441 (hex=1.7d400349)
DISTRIB TRAN LES.f3da61c5.468.1.4492
is local tran 468.1.4492 (hex=1d4.01.118c))
delete pending committed tran, scn=6396314441 (hex=1.7d400349)
上面是出现的故障信息在oracle日志中能够查看到以下是截图
造成问题的主要原因是在设置dblink连接的时候
因为应用是指定节点连接的,而我们的DBLINK配置的TNSNAME指定是是随机节点,导致事务管理器不能找到同一个节点,而出现问题,通过修改DBLINK的设置,当近端事务在第一个节点时,dblink指向也需要时第一个节点:
dblink_hst =
(DESCRIPTION =
(ADDRESS = (PROTOCOL =TCP)(HOST = VIP1)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = DBNAME)
(INSTANCE_NAME = SID1)
)
)
第二个节点同样需要配置TNSNAME文件只是需要把VIP1换成VIP2、SID1换成SID2(一般tnsnames.ora文件都在下面的目录下app/oracle/product/11.2.0.4/db_1/network/admin)
修改后观察alert日志,不再出现分布式事务delete的信息。