Oracle11g 如何捕获ORA-02055,“分布式更新操作失败;需要回滚”,并可能找到根本原因
在一台Oracle服务器上的存储过程中,我试图将记录插入第二台Oracle服务器上的表中,但失败了,异常是分布式更新操作失败;需要回滚 虽然我的代码包装在BeginException END中,但错误处理程序无法捕获错误 我甚至把它扔进了第二个错误处理程序,但没有效果。你知道我为什么不能抓住这个错误吗。程序编译时没有问题 我的主要目标是捕捉错误,这样我就可以返回一些有用的东西给我的用户。此外,如果可能的话,我想找出错误的根源 注1:如果我取消对引发远程错误的行的注释,那么它将按预期捕获 注2:与远程服务器的连接是可靠的,因为我可以毫无问题地查询它 这两台服务器都是:Oracle Database 11g 11.2.0.3.0版-64位生产Oracle11g 如何捕获ORA-02055,“分布式更新操作失败;需要回滚”,并可能找到根本原因,oracle11g,Oracle11g,在一台Oracle服务器上的存储过程中,我试图将记录插入第二台Oracle服务器上的表中,但失败了,异常是分布式更新操作失败;需要回滚 虽然我的代码包装在BeginException END中,但错误处理程序无法捕获错误 我甚至把它扔进了第二个错误处理程序,但没有效果。你知道我为什么不能抓住这个错误吗。程序编译时没有问题 我的主要目标是捕捉错误,这样我就可以返回一些有用的东西给我的用户。此外,如果可能的话,我想找出错误的根源 注1:如果我取消对引发远程错误的行的注释,那么它将按预期捕获 注2:与
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发出错误消息“分布式更新操作失败”;需要回滚,因为现在有一个事务需要先回滚,然后才能引发以下错误 在我的调试过程中,我没有看到完整的消息,而这些消息本可以将我发送到正确的方向