【多选题】分布式事务执行失败触发回滚,会产生哪些动作?

【多选题】分布式事务执行失败触发回滚,会产生哪些动作?()
A. 依靠 UNDO 日志还原修改前数据
B. 向所有参与者下发回滚指令
C. 释放事务占用的行锁资源
D. 永久删除该事务对应的 CLOG 日志

2 个赞

正确答案是:A、B、C

解析:

在分布式数据库(如 OceanBase)中,当分布式事务执行失败并触发回滚时,系统需要保证数据的一致性、释放资源并记录事务的最终状态。具体产生的动作如下:

  • A. 依靠 UNDO 日志还原修改前数据(正确):事务在修改数据时会产生 UNDO 日志(记录数据的旧值)。当触发回滚时,数据库引擎会读取这些 UNDO 日志,将数据逆向恢复到事务修改前的状态,从而保证数据的原子性。
  • B. 向所有参与者下发回滚指令(正确):分布式事务涉及多个节点(参与者)。当事务协调者(如 Root Service 或事务协调器)决定回滚时,必须向所有参与该事务的节点广播回滚指令,确保所有节点上的相关操作都被撤销,维持全局一致性。
  • C. 释放事务占用的行锁资源(正确):事务在执行过程中为了保证隔离性,会对其修改的数据行加排他锁。事务一旦回滚结束,这些锁必须被立即释放,以避免阻塞其他事务的执行。
  • D. 永久删除该事务对应的 CLOG 日志(错误):CLOG(Commit Log)是用于保证数据持久化和主备同步的关键日志。即使事务最终回滚,系统也需要将“回滚”这一状态记录在 CLOG 中(例如写入一条 Abort 记录),以便在节点重启或故障恢复时能够重放日志并正确还原事务的最终状态。因此,CLOG 日志绝对不会被永久删除。
1 个赞

正确答案是:A、B、C

详细解析:

在 OceanBase 的分布式事务机制中,当分布式事务执行失败需要触发回滚(Rollback)时,系统会执行以下动作:

  • :white_check_mark: 选项 A (依靠 UNDO 日志还原修改前数据) 正确
    回滚事务的本质是撤销事务中所做的所有更改。OceanBase 会根据持久化的事务日志(如 Redo Log 及 Undo 信息)将数据还原到事务执行之前的状态,保证数据的原子性。

  • :white_check_mark: 选项 B (向所有参与者下发回滚指令) 正确
    在优化的两阶段提交(2PC)协议中,如果协调者(Coordinator)在 Prepare 阶段收到任一参与者的失败反馈,或者在事务执行过程中发生异常,协调者会向所有参与事务的分区(参与者)发送“Rollback 请求”,通知它们撤销已执行的操作。

  • :white_check_mark: 选项 C (释放事务占用的行锁资源) 正确
    参考材料明确指出,回滚整个事务后,“事务持有的所有锁都将被释放”。这包括事务在执行过程中获取的行级排他锁(X锁)等,从而避免死锁或资源长时间被占用。

  • :x: 选项 D (永久删除该事务对应的 CLOG 日志) 错误
    分布式事务的 CLOG(Commit Log)是保障数据强一致性和故障恢复的核心。即使在事务回滚的场景下,回滚决策本身也会作为一条特殊日志通过 Paxos 协议同步到各个副本,以确保在节点宕机恢复时能够正确重建事务状态。因此,CLOG 不会被永久删除,而是会被保留并用于后续的合并(Compaction)等生命周期管理。

1 个赞