diff --git a/src/sql/ob_sql.cpp b/src/sql/ob_sql.cpp index 4c1a5f0ef..ab1fec17d 100644 --- a/src/sql/ob_sql.cpp +++ b/src/sql/ob_sql.cpp @@ -173,6 +173,14 @@ void ObSql::stat() LOG_WARN("only DML stmt or SET command is supported to be executed on txn temporary node", \ KR(ret), K(stmt_type), K(session.get_txn_free_route_ctx()), K(session)); \ } \ + ObPhysicalPlan* phy_plan = result.get_physical_plan(); \ + if (OB_SUCCESS == ret && NULL != phy_plan) { \ + if (phy_plan->has_link_table()) { \ + ret = OB_TRANS_FREE_ROUTE_NOT_SUPPORTED; \ + LOG_WARN("stmt with dblink can not be executed on txn temporary node", \ + KR(ret), K(stmt_type), K(session.get_txn_free_route_ctx()), K(session)); \ + } \ + } \ } \ } diff --git a/src/storage/tx/ob_tx_free_route.cpp b/src/storage/tx/ob_tx_free_route.cpp index b8154636d..970c5b7be 100644 --- a/src/storage/tx/ob_tx_free_route.cpp +++ b/src/storage/tx/ob_tx_free_route.cpp @@ -1100,6 +1100,9 @@ bool ObTransService::need_fallback_(ObTxDesc &tx, int64_t &total_size) if (tx.with_temporary_table()) { TRANS_LOG(TRACE, "with tx level temp-table"); fallback = true; + } else if (tx.is_xa_trans() && tx.is_xa_tightly_couple()) { + TRANS_LOG(TRACE, "need fallback for tightly coupled xa trans"); + fallback = true; } else { total_size = OB_E(EventTable::EN_TX_FREE_ROUTE_STATE_SIZE, tx.tx_id_) tx.estimate_state_size(); if (total_size > MAX_STATE_SIZE) {