问题描述
嗨,
我有通过数据库链接的过程,并得到这个错误
ORA-02064: 不支持分布式操作
这是因为需要应用pragma autonousous_transaction。但是还有其他方法吗?我们需要重用的一些过程,我们只需要最后执行提交。
是否有其他方法不将所有逻辑合并到一个过程中 (可能非常混乱)。
谢谢。
我有通过数据库链接的过程,并得到这个错误
ORA-02064: 不支持分布式操作
这是因为需要应用pragma autonousous_transaction。但是还有其他方法吗?我们需要重用的一些过程,我们只需要最后执行提交。
是否有其他方法不将所有逻辑合并到一个过程中 (可能非常混乱)。
谢谢。
专家解答
在 “数据库a” 调用 “数据库B” 的分布式事务中,只有 “数据库A” 可以提交。原因是 “数据库B” 在提交时没有与 “数据库a” 协调的机制。我们需要进行2阶段提交,以确保在事务提交时,对数据库a执行的任何工作都已提交 * 以及对数据库b的任何工作。
因为当数据库A同时调用数据库B和数据库C时,问题通常会更加复杂。在这里,如果数据库B (它不知道数据库C甚至涉及) 试图提交-它将无法与数据库A协调,并且不知道数据库C在事务中的存在-不能协调它。
常见的解决方法是现有例程的可选参数-提交标志 (使其类似于:
默认为FALSE的p_do_not_commit布尔值);
然后,您将在受影响的例程中查找所有commit和rollback语句,并将其重写为:
如果 (不是p_do_not_commit),则
提交;
如果结束;
因此可以本地或远程调用例程,并相应地设置参数。
因为当数据库A同时调用数据库B和数据库C时,问题通常会更加复杂。在这里,如果数据库B (它不知道数据库C甚至涉及) 试图提交-它将无法与数据库A协调,并且不知道数据库C在事务中的存在-不能协调它。
常见的解决方法是现有例程的可选参数-提交标志 (使其类似于:
默认为FALSE的p_do_not_commit布尔值);
然后,您将在受影响的例程中查找所有commit和rollback语句,并将其重写为:
如果 (不是p_do_not_commit),则
提交;
如果结束;
因此可以本地或远程调用例程,并相应地设置参数。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




