ORA-00604: 递归SQL级别1出现错误, ORA-02067:要求事务处理或保存回退点

来源:互联网 发布:visio2010软件下载 编辑:程序博客网 时间:2024/06/05 08:51

报的错如题:
ORA-00604: 递归SQL级别1出现错误 
ORA-02067:要求事务处理或保存回退点

A服务器oracle建立dblink,存储过程的内容是:往B服务器中oracle的表里插入数据。 在客户端访问调用此存储过程的时候报以上错误。



解決模拟

客户系统经常报错误ORA-02067,搜了一下,有关这个错误的解释几乎都是:Cause: A failure (typically a trigger or stored procedure with multiple remote updates) occurred such that the all-or-nothing execution of a previous Oracle call cannot be guaranteed.Action: rollback to a previous savepoint or rollback the transaction and resubmit.[@more@]下面是我的一个模拟过程:C:>sqlplus system/system@orclSQL*Plus: Release 10.2.0.1.0 - Production on 星期六 9月 3 21:33:32 2011Copyright (c) 1982, 2005, Oracle. All rights reserved.连接到:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining optionsSQL> create table t(id int primary key) tablespace users;表已创建。SQL>--==================================C:>sqlplus system/system@testSQL*Plus: Release 10.2.0.1.0 - Production on 星期六 9月 3 21:32:37 2011Copyright (c) 1982, 2005, Oracle. All rights reserved.连接到:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining optionsSQL> create table t(id int primary key) tablespace users;表已创建。SQL> create public database link dbl connect to system identified by system using 'orcl';数据库链接已创建。SQL> select sysdate from dual@dbl;SYSDATE-------------------2011-09-03 21:34:10SQL> declare2 begin3 insert into t@dbl values(1);4 insert into t values(1);5 insert into t values(1);6 commit;7 end;8 /declare*第 1 行出现错误:ORA-02055: 分布式更新操作失效; 要求回退ORA-00001: 违反唯一约束条件 (SYSTEM.SYS_C002971)ORA-06512: 在 line 5SQL> select sysdate from dual;select sysdate from dual*第 1 行出现错误:ORA-02067: 要求事务处理或保存点回退SQL> rollback;回退已完成。SQL> declare2 begin3 insert into t values(1);4 insert into t@dbl values(1);5 insert into t@dbl values(1);6 commit;7 end;8 /declare*第 1 行出现错误:ORA-02055: 分布式更新操作失效; 要求回退ORA-00001: 违反唯一约束条件 (SYSTEM.SYS_C004151)ORA-02063: 紧接着 line (起自 DBL)ORA-06512: 在 line 5SQL> select sysdate from dual;select sysdate from dual*第 1 行出现错误:ORA-02067: 要求事务处理或保存点回退SQL>--==================================造成这个错误的最根本的原因是通过dblink远程更新以及同时还要涉及到本地更新时,其中一部分失败了,但是没有出错处理,或者准确的说是没有rollback,这样错误ORA-02067还不是被直接报出来,而是如果没有在该session中执行rollback,之后不论执行什么错误都会在这个session中报ORA-02067错误,那怕是执行一个查询,这也是不好模拟的原因,客户的系统报了这个错误之后输出的sql都是一个非常简单的查询,所以前面到底执行了什么sql不容易捕获。出现错误之后如果不修改程序,我觉得似乎没有什么办法,只能是重启实例,或者断开所有连接...


0 0
原创粉丝点击