ORA-02046: ORA-02046:分布式事务处理已经开始

 

平台: Oracle10.2.0.4

--执行第一遍没问题, 执行第二遍就不行, 除非退出当前session(如退出toad)

BEGIN
   PKG_EMOA_OUT_ECHARGING.fetchPlayerChargeDetail (SYSDATE);
END;
Error at line 2
ORA-02046: distributed transaction already begun
ORA-02063: preceding line from BI
ORA-06512: at "EMOA.PKG_EMOA_OUT_ECHARGING", line 91
ORA-06512: at "EMOA.PKG_EMOA_OUT_ECHARGING", line 115
ORA-06512: at line 2

由于package里cusor中select的视图是通过dblink获得的, 而远程数据库中被调用的视图, 又通过dblink调用了其它的表, 真是够复杂的. 然后就出现了该错.

--重建了dblink也无效

--临时解决办法(强行关闭dblink)

BEGIN
   execute immediate 'alter session close database link BI.LK';
   PKG_EMOA_OUT_ECHARGING.fetchPlayerChargeDetail (SYSDATE);
END;

--End--

 

这个是oracle内部错误,原因是有同一个会话没有完成,其操作还在数据缓冲区中,这时该会话并没有退出,在UNIX就是僵尸进程,WINDOWS下就是死进程,由ORACLE后台清理程序完成退出操作。

你可以在SYS用户下查找该会话的SPID,然后KILL它,然后执行就可以了,也就是在另外的会话中执行该语句。

做个sql trace
Alter session set events '10046 trace name context forever, level 4';

看看根本的recursive sql的问题是哪里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值