搜索

12.8.2. 特定于厂商的 XA 恢复

download PDF
特定厂商配置

些数据库需要特定的配置,才能在由 JBoss EAP 事务管理器管理的 XA 交易中协作。有关详细信息和最新信息,请查看您的数据库供应商文档。

MySQL
不需要特殊配置。如需更多信息,请参阅 MySQL 文档。
PostgreSQL 和 Postgres Plus Advanced Server
要使 PostgreSQL 能够处理 XA 事务,请将配置参数 max_prepared_transactions 改为大于 0 的值,等于或大于 max_connections
Oracle

确保 Oracle 用户 USER 有权访问恢复所需的表。

GRANT SELECT ON sys.dba_pending_transactions TO USER;
GRANT SELECT ON sys.pending_trans$ TO USER;
GRANT SELECT ON sys.dba_2pc_pending TO USER;
GRANT EXECUTE ON sys.dbms_xa TO USER;

如果 Oracle 用户没有正确的权限,您可能会看到类似如下的错误:

WARN  [com.arjuna.ats.jta.logging.loggerI18N] [com.arjuna.ats.internal.jta.recovery.xarecovery1] Local XARecoveryModule.xaRecovery  got XA exception javax.transaction.xa.XAException, XAException.XAER_RMERR
Microsoft SQL Server
如需更多信息,请参阅 Microsoft SQL Server 文档,包括 http://msdn.microsoft.com/en-us/library/aa342335.aspx
IBM DB2
不需要特殊配置。如需更多信息,请参阅 IBM DB2 文档。
Sybase

Sybase 希望在数据库中启用 XA 事务。如果没有正确的数据库配置,XA 事务将无法工作。enable xact 协调 参数启用或禁用自适应服务器事务协调服务。启用此参数后,自适应服务器服务器可确保对远程适配器服务器数据提交或回滚原始事务的更新。

要启用事务协调,请使用:

sp_configure 'enable xact coordination', 1
MariaDB
不需要特殊配置。如需更多信息,请参阅 MariaDB 文档。
已知问题

这些处理 XA 事务的已知问题与 JBoss EAP 7 支持的特定数据库和 JDBC 驱动程序版本有关。有关支持的数据库的最新信息,请参阅 JBoss EAP 支持的配置

MySQL
MySQL 无法完全处理 XA 事务。如果客户端与 MySQL 断开连接,则此类交易的所有信息都将丢失。如需更多信息,请参阅此 MySQL 错误。请注意,这个问题已在 MySQL 5.7 中解决。
PostgreSQL 和 Postgres Plus Advanced Server

当两阶段提交(2PC)的提交阶段发生网络故障时,JDBC 驱动程序会返回 XAER_RMERR XAException 错误代码。此错误向交易管理器表明一个无法恢复的灾难性事件,但事务保留在数据库端的 in doubt 状态,并在网络连接再次建立后易于更正。正确的返回代码应当是 XAER_RMFAIL 或 XAER_RETRY。错误代码不正确会导致事务保持在 JBoss EAP 侧的 Heuristic 状态,并在数据库中锁定需要人工干预。如需更多信息,请参阅此 PostgreSQL 错误

如果使用单阶段提交优化时发生连接失败,JDBC 驱动程序将返回 XAER_RMERR,但应当返回 XAER_RMFAIL 错误代码。如果数据库在一阶提交期间提交数据并且连接在停机时中断,这可能会导致数据不一致,然后客户端被通知事务被回滚。

Postgres Plus JDBC 驱动程序为 Postgres Plus Server 中存在的所有准备事务返回 XID,因此无法确定 XID 所属的数据库。如果您在 JBoss EAP 中为同一数据库定义多个数据源,则内部事务恢复尝试可能会在错误的帐户下运行,这会导致恢复失败。

Oracle

当恢复管理器使用配置了一些用户凭据的数据源调用恢复时,JDBC 驱动程序会返回属于数据库实例上所有用户的 XID。JDBC 驱动程序抛出异常 ORA-24774:无法切换到指定的事务,因为它试图恢复属于其他用户的 XID。

这个问题的解决方法是向在恢复数据源配置中使用凭证的用户授予 FORCE ANY TRANSACTION 特权。有关配置权限的更多信息,请参阅 http://docs.oracle.com/database/121/ADMIN/ds_txnman.htm#ADMIN12259

Microsoft SQL Server

当两阶段提交(2PC)的提交阶段发生网络故障时,JDBC 驱动程序会返回 XAER_RMERR XAException 错误代码。此错误向交易管理器表明一个无法恢复的灾难性事件,但事务保留在数据库端的 in doubt 状态,并在网络连接再次建立后易于更正。正确的返回代码应当是 XAER_RMFAIL 或 XAER_RETRY。错误代码不正确会导致事务保持在 JBoss EAP 侧的 Heuristic 状态,并在数据库中锁定需要人工干预。如需更多信息,请参阅此 Microsoft SQL Server 问题报告

如果使用单阶段提交优化时发生连接失败,JDBC 驱动程序将返回 XAER_RMERR,但应当返回 XAER_RMFAIL 错误代码。如果数据库在一阶提交期间提交数据并且连接在停机时中断,这可能会导致数据不一致,然后客户端被通知事务被回滚。

IBM DB2
如果在单阶段提交期间发生连接失败,JDBC 驱动程序将返回 XAER_RETRY,但应当返回 XAER_RMFAIL 错误代码。如果数据库在一阶提交期间提交数据并且连接在停机时中断,这可能会导致数据不一致,然后客户端被通知事务被回滚。
Sybase

当两阶段提交(2PC)的提交阶段发生网络故障时,JDBC 驱动程序会返回 XAER_RMERR XAException 错误代码。此错误向交易管理器表明一个无法恢复的灾难性事件,但事务保留在数据库端的 in doubt 状态,并在网络连接再次建立后易于更正。正确的返回代码应当是 XAER_RMFAIL 或 XAER_RETRY。错误代码不正确会导致事务保持在 JBoss EAP 侧的 Heuristic 状态,并在数据库中锁定需要人工干预。

如果使用单阶段提交优化时发生连接失败,JDBC 驱动程序将返回 XAER_RMERR,但应当返回 XAER_RMFAIL 错误代码。如果数据库在一阶提交期间提交数据并且连接在停机时中断,这可能会导致数据不一致,然后客户端被通知事务被回滚。

如果在 Sybase 事务分支处于就绪状态之前包含插入 Sybase 15.7 或 16 数据库的 XA 事务失败,则重复 XA 事务并插入具有相同主键的相同记录会失败,并出现 com.sybase.jdbc4.jdbc.SybSQLException: Attempt 以插入重复密钥行。这个异常将被抛出,直到原始的未完成 Sybase 事务分支回滚。

MariaDB
MariaDB 无法完全处理 XA 事务。如果客户端与 MariaDB 断开连接,则此类交易的所有信息都将丢失。
MariaDB Galera Cluster
MariaDB Galera 集群中不支持 XA 事务。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.