Oracle11g 如何捕获ORA-02055,“分布式更新操作失败;需要回滚”,并可能找到根本原因

Oracle11g 如何捕获ORA-02055,“分布式更新操作失败;需要回滚”,并可能找到根本原因,oracle11g,Oracle11g,在一台Oracle服务器上的存储过程中,我试图将记录插入第二台Oracle服务器上的表中,但失败了,异常是分布式更新操作失败;需要回滚 虽然我的代码包装在BeginException END中,但错误处理程序无法捕获错误 我甚至把它扔进了第二个错误处理程序,但没有效果。你知道我为什么不能抓住这个错误吗。程序编译时没有问题 我的主要目标是捕捉错误,这样我就可以返回一些有用的东西给我的用户。此外,如果可能的话,我想找出错误的根源 注1:如果我取消对引发远程错误的行的注释,那么它将按预期捕获 注2:与

在一台Oracle服务器上的存储过程中,我试图将记录插入第二台Oracle服务器上的表中,但失败了,异常是分布式更新操作失败;需要回滚

虽然我的代码包装在BeginException END中,但错误处理程序无法捕获错误

我甚至把它扔进了第二个错误处理程序,但没有效果。你知道我为什么不能抓住这个错误吗。程序编译时没有问题

我的主要目标是捕捉错误,这样我就可以返回一些有用的东西给我的用户。此外,如果可能的话,我想找出错误的根源

注1:如果我取消对引发远程错误的行的注释,那么它将按预期捕获

注2:与远程服务器的连接是可靠的,因为我可以毫无问题地查询它

这两台服务器都是:Oracle Database 11g 11.2.0.3.0版-64位生产

BEGIN                                                                 
    begin
      --raise_application_error( -20001, 'Remote Error' );
      insert into RemoteSchema.RemoteObject@RemoteSystem
        (field_one, field_two)
        select value_one, value_two from dual;
     exception
       when others then
         raise_application_error( -20000, 'Remote Error:' || sqlerrm );
     end;
 exception
   when others then
     raise_application_error( -20000, 'Caught Remote Error:' || sqlerrm );
 end;

经过多次调试,一位同事帮我发现了问题。错误消息令人困惑,因为更新实际上是成功的,但成功意味着现在有一个具有分布式更新的活动事务

当我的代码遇到一个随后的小错误时,Oracle发出错误消息“分布式更新操作失败”;需要回滚,因为现在有一个事务需要先回滚,然后才能引发以下错误

在我的调试过程中,我没有看到完整的消息,而这些消息本可以将我发送到正确的方向