ORA-02046: 分布式事务处理已经开始解决方案

   业务场景:A库上的数据同步到B库上,这个本来是很简单的问题,但由于要在B库上建表,A库只能通过调用B库的存储过程才能实现,就这样就报错了,错误如下:

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

ORA-02063: 紧接着 line (起自 DBLINK_TO_GD)

ORA-06512: 在 "LC_SC_DBLINK_TEST.PKG_SP_ETL_DBLINK_SOUR", line 253


[oracle@oracle ~]$ oerr ora 20463
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.

 在远程调用的存储过程或者包中使用事务控制语句。因为远程调用的包执行时没有机制执行2-phase commit。事务控制语句应该在发起事务的节点执行。


解决方案:

     所有的操作在A上执行,可以通过dbms_utility.EXEC_DDL_STATEMENT实现在A上远程DDL,在操作前后都加上。

     dbms_session.close_database_link(dblink_name);

     exec dbms_utility.EXEC_DDL_STATEMENT@db_link_developer('create table test as select * from dba_objects@dblink_to_A');

           --实验参见http://blog.csdn.net/stevendbaguo/article/details/50155845

     dbms_session.close_database_link(dblink_name);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值