2

更准确地说,让我们考虑在 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解析正确,我查了三遍。

4

1 回答 1

0

v$transaction 什么都不显示的原因可能是分布式事务已经在被查询的节点上提交(或回滚) - 检查状态列。

您可以要求 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

于 2013-10-24T07:55:39.413 回答