oracle11g - 如何捕获 ORA-02055、 "distributed update operation failed; rollback required"并可能找到根本原因

标签 oracle11g

在一台 Oracle 服务器上的存储过程中,我尝试将一条记录插入到另一台 Oracle 服务器上的表中,但它失败并出现异常“分布式更新操作失败;需要回滚”

尽管我的代码包含在 BEGIN EXCEPTION END 中,但错误处理程序未能捕获错误。

我什至把它扔进了第二个错误处理程序中,但没有任何效果。知道为什么我无法捕捉到这个错误。该过程编译没有问题。

我的主要目标是捕获错误,以便向用户返回有用的信息。此外,如果可能的话,我想找出错误的根源。

注意 1:如果我取消注释引发“远程错误”的行,那么它会按预期被捕获。

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

两台服务器都是: Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

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 提出了错误消息“分布式更新操作失败;需要回滚”,因为现在有一个事务需要先回滚,然后我才能提出以下错误。

在我的调试中,我没有看到完整的消息,这些消息会向我发送正确的方向。

关于oracle11g - 如何捕获 ORA-02055、 "distributed update operation failed; rollback required"并可能找到根本原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12395665/

相关文章:

sql - Oracle 查询默认 null 并更新 current_timestamp

oracle如何更改表按范围间隔添加分区

oracle - 目标表中的默认值

sql - 使用行 ID 导出唯一行

java - 单例模式在有一些更新时会产生一些问题

email - 是否可以在 Oracle 中以事务方式发送电子邮件?

c# - 如何解决我个人的 ORA-12154 错误?

oracle - PLSQL中根据条件(其他变量的值)为变量赋值

Oracle 过程仅在将 serveroutput 设置为 on 时才起作用;

sql - 如何为存储过程参数选择默认值?