异常事务处理方案
清除异常任务数据
问题现象
事务提交异常,并且业务需求不再需要提交,需要清除异常事务。
问题原因
业务代码问题导致事务提交异常。
解决方案
进入 dtxserver 的
dtx_remote
库。使用如下命令查询
business_action
、business_activity
表中的 txid 记录:select * from business_action_01 where tx_id ="XXXXXX"
select * from business_activity_01 where tx_id = "XXXXXX"
清除异常任务信息。
若
dtx_remote
库的business_action
、business_activity
表不为空,则使用如下命令清除异常任务信息:delete from business_action_01 where tx_id ="XXXXXX"
delete from business_activity_01 where tx_id ="XXXXXX"
若
dtx_remote
库的business_action
、business_activity
表为空,则进行如下操作:根据客户的分库分表规则找出对应分库。
根据事务 ID 查找到 DTX 数据库,进入
dtx_shard_X
分库。使用如下命令查询分库中
business_action
、business_activity
表中的 txid 记录:select * from business_action_01 where tx_id ="XXXXXX"
select * from business_activity_01 where tx_id = "XXXXXX"
说明若想要提高查询速度,您可以在 DTX 配置数据库
dtx_config
使用delete from dtx_transaction where tx_id="xxxxxx"
命令清除事务统计表的数据:使用如下命令清除异常任务信息:
delete from business_action_01 where tx_id ="XXXXXX"
delete from business_activity_01 where tx_id ="XXXXXX"
清除异常任务后,单击 事务详情,若发生报错“java.langIllegalArgumentException:发起方数据不存在,可能已经被清理”,表示已清除成功。
事务回滚异常
问题现象
事务状态显示:异常(回滚异常)。
发起方
common-error.log
日志出现大量报错“DTX-REMOTE - invokeAction rollback finish"。
问题原因
DTX 参与方不在线,DTX server 无法联系参与方回滚成功。
解决方案
以下提供两种解决方案:
通过日志排查参与方不在线原因。
在
dtx-remote.log
或者commen-error.log
日志中查看报错信息,根据报错信息找出参与方不在线原因。若事务已不需要回滚,则删除该事务回滚即可。
进入 dtxserver 的
dtx_remote
库。使用如下命令查询
business_action
、business_activity
表中的 txid 记录:select * from business_action_01 where tx_id ="XXXXXX"
select * from business_activity_01 where tx_id ="XXXXXX"
清除 txid 数据。
TCC 模式
使用如下命令将 dtxsever 的
dtx_remote
库中 txid 数据清除:delete from business_activiy where tx_id ="XXXXXX"
delete from business_action where tx_id ="XXXXXX"
FMT 模式
使用如下命令,将 dtxsever 的
dtx_remote
库中 txid 数据清除:delete from business_activiy where tx_id ="XXXXXX"
delete from business_action where tx_id ="XXXXXX"
使用如下命令,将用户的业务数据库中
dtx_branch_info
和dtx_row_lock
表中 txid 数据清除:delete from dtx_branch_info where tx_id ="XXXXXX"
delete from dtx_row_lock where tx_id ="XXXXXX"
清除异常任务后,单击 事务详情,若发生报错“java.langIllegalArgumentException:发起方数据不存在,可能已经被清理”,表示已清除成功。