文档解释
ORA-02047: cannot join the distributed transaction in progress
Cause: Either a transaction is in progress against a remote database that does not fully support two phase commit, and an update is attempted on another database, or updates are pending and and an attempt is made to update a different database that does not fully support two phase commit.
Action: complete the current transaction and then resubmit the update request.
。
ORA-02047错误表示已经存在的一个分布式事务无法连接。
官方解释
ORA-02047错误表明一个已经存在的分布式事务无法连接。当一个会话试图连接到一个正在执行的分布式事务时,将会发生这个错误。该错误可以被一些分布式事务管理标准称为XAER_RMERR,其中RM表示Resource Manager。
常见案例
一个例子是一个外部应用程序,该应用程序通过另一个事务使用同一个会话来连接到已经发起的分布式事务。这种情况下,应用程序请求的会话未能参加已经存在的分布式事务,从而导致ORA-02047错误发生。
正常处理方法和步骤
要解决此错误,可以尝试重新连接来保护分布式事务,如果可能的话,请使用新的连接:
1.通过调用DBMS_TRANSACTION.LOCAL_TRANSACTION_ID函数来检索已经存在的分布式事务ID。
2.创建一个新的连接。
3.手动地将连接设置为在现有分布式事务中,使用上一步骤得出的分布式事务ID作为参数:
EXECUTE DBMS_TRANSACTION.JOIN_TRANSACTION(:dist_txn_id);