Ale*_*rov 8 java database xa distributed-transactions atomikos
我想了解如果我设置了分布式事务功能是否适用于我的应用程序 com.atomikos.icatch.enable_logging=false
com.atomikos.icatch.enable_logging=falsecom.atomikos.icatch.enable_logging=false如果并非所有分布式事务的参与者都已提交,则可能导致数据库的状态不一致?更新 我在这个问题之后被触发,以便更多地了解我在这里描述的分布式事务的内部结构: 如何调整分布式(XA)事务的性能?
好吧,我花了一些时间才弄清楚。答案是否定的,如果我们禁用 com.atomikos.icatch.enable_logging,我们将无法保证事务一致性,并且最终可能会在一个数据库中提交一些内容,而在另一个数据库中未提交。
在XA事务中我们有两个主要角色。交易协调者和交易参与者。涉及两个事务日志。一方面是协调者的事务日志,另一方面是参与者的事务日志。
首先,XA 事务中的所有参与者都将自己注册到协调器。 XA_START 随后进入记录阶段,其中所有 sql 语句都将分派给不同的参与者 XA_END标记此过程的结束以及从应用程序角度调用提交的时刻。
此时,事务协调器在幕后进行控制。PREPARE 消息发送给每个参与者。每个参与者都以 READY TO COMMIT 或 ABORT 响应,消息被强制记录到日志中。如果所有参与者都响应 COMMIT。提交调用会发送给每个参与者。
这意味着,如果发生崩溃并且事务日志记录在协调器端(即 Atomikos)被禁用,则很有可能一个参与者设法提交,而另一个参与者无法提交。
基本上,如果你想保证一致的状态,com.atomikos.icatch.enable_logging 是强制性的。
| 归档时间: |
|
| 查看次数: |
695 次 |
| 最近记录: |