两阶段提交流程

在分布式系统中,一个逻辑工作单元的行为可能发生在多个系统上。

当这些操作更新可恢复资源时,提交过程将确保逻辑工作单元的所有影响要么全部保留,要么全部消失。 尽管组件、系统或通信出现故障,提交过程仍能确保这一结果。

Db2 使用两阶段提交流程在子系统之间进行通信。 两阶段提交流程由一个名为协调器的子系统控制。 其他参与的系统称为参与者Db2 , CICS® ,或 WebSphere® Application ServerDb2 互动时,始终是协调人。 在涉及这些系统的交易中, Db2 始终是参与者。 Db2 在与TSO交互时,它始终是协调者,而 则完全控制着这些交互中的提交过程。 Db2 在与其他数据库管理系统(包括其他 Db2 子系统)交互时,您的本地 Db2 可以作为协调者或参与者。

下图展示了两阶段提交流程。 协调员(IMS、 CICS 或 Db2 )的活动显示在上行,参与者活动显示在下行。
图 1。 说明与另一个子系统协调的提交的时间线
开始图描述。 该图是一个时间轴,描绘了协调子系统和参与子系统在协调承诺中采取的行动。 结束图描述。

以下数字与图表中的时间轴一一对应。 参与者的更新操作状态显示在两行之间。

  1. 协调器中的数据处于一致状态。
  2. 协调器中的应用程序通过执行SQL语句,调用参与者更新一些数据。
  3. 这会在参与者体内启动一个恢复单元。
  4. 在协调器中继续处理,直到达到应用程序同步点。
  5. 协调员随后开始提交处理。 IMS 可以通过DL/I CHKP调用、快速路径SYNC调用、对I/O PCB的GET UNIQUE调用或正常应用终止来实现。 CICS 使用SYNCPOINT命令或正常应用程序终止。 Db2 应用程序通过SQL COMMIT语句或正常终止开始提交处理。 提交处理的第一阶段开始。
  6. 协调员通知参与者,准备提交。 参与者开始第一阶段处理。
  7. 参与者成功完成第一阶段,在日志中记录这一事实,并通知协调员。
  8. 协调员收到通知。
  9. 协调员成功完成第一阶段处理。 现在,两个子系统都同意提交数据更改,因为它们都已完成第一阶段,并且可以从任何故障中恢复。 协调员在日志中记录下做出承诺的时刻——两个子系统做出不可撤销的更改决定。

    协调员现在开始处理第二阶段——实际承诺。

  10. 协调员通知参与者可以开始第二阶段。
  11. 参与者记录第2阶段开始的时间。
  12. 第二阶段已成功完成,这为参与者树立了新的目标。 参与者随后通知协调员已完成第二阶段。
  13. 协调员完成第二阶段处理。 现在,这两个子系统控制的数据是一致的,可供其他应用程序使用。

在某些情况下,当自上次提交流程完成以来,参与者资源未发生任何变化时,协调员会联系参与者。 例如,当执行一系列SELECT语句后发出SYNCPOINT,或者发出SYNCPOINT后立即到达任务结束时,就会发生这种情况。 当这种情况发生时,参与者会在第一个提交阶段执行两阶段提交的两个阶段,并记录用户或作业在参与者处为只读。