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

该错误在远程调用存储过程执行的时候可能会出现。ORACLE官方并没有给出有效的解决方法。
[oracle@testdb1 ~]$ oerr ora 2046
02046, 00000, "distributed transaction already begun"
// *Cause: internal error or error in external transaction manager.
//         A server session received a begin_tran RPC before finishing
//         with a previous distributed tran.
[oracle@testdb1 ~]$
该错误会在更新的表上加 分布式锁,该类型的锁会阻塞查询。
METALINK上找到的ORACLE官方的建议是CONTACT ORACLE SUPPORT. 自己做了一些分析,再现了该错误。

这个错误在RPC调用存储过程和包。被引用的包或过程中又有引用其他的DB_LINK,且包中有事务控制语句的 情况下会发生。
如下为所做的实验。
两个库DB1,DB2.分别创建到对方的DB_LINK
DB2
上编写存储过程

你可能感兴趣的:(ORA-02046分布式事务已经开始)