在给定的事务中处理什么SQL,它出现在DBA_2PC_PENDING中?

时间:2013-10-15 11:23:41

标签: oracle transactions distributed-transactions

更准确地说,让我们考虑一下DBA_2PC_PENDING视图中出现一些不确定事务的情况。

我有这些事务的本地和全局数量,但想知道我们是否能够获得有关在其中处理SQL的信息,或者做了什么。我搜索了这个主题,但没有发现任何真正有用的东西。

我试图在v$transaction中找到有关它们的任何信息,但面临失败。 此查询不会为v$transaction

中的列返回任何内容
SELECT * FROM dba_2pc_pending p, v$transaction t 
WHERE 
    substr(p.local_tran_id, 1, instr(p.local_tran_id, '.', 1, 1) - 1) = t.xidusn(+) 
    and substr(p.local_tran_id, instr(p.local_tran_id, '.', 1, 1) + 1, instr(p.local_tran_id, '.', 1, 2) - instr(p.local_tran_id, '.', 1, 1) - 1) = t.xidslot(+) 
    and substr(p.local_tran_id, instr(p.local_tran_id, '.', 1, 2) + 1) = t.xidsqn(+); 

解析本地交易ID是正确的,我检查了三次。

1 个答案:

答案 0 :(得分:0)

v $ transaction没有显示任何内容的原因可能是分布式事务已在被查询的节点上提交(或回滚) - 请检查STATE列。

您可以要求DBA_2PC_NEIGHBORS检查传入/传出事务的连接:

SELECT * FROM dba_2pc_neighbors WHERE local_tran_id = 'x.x.x';

在其中一个参与节点上,您最终会找到待处理的交易。

检查Oracle文档,了解如何浏览参与站点以找出谁是协调员以及哪些节点失败:http://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_txnman007.htm