两阶段提交流程
在分布式系统中,一个逻辑工作单元的行为可能发生在多个系统上。
当这些操作更新可恢复资源时,提交过程将确保逻辑工作单元的所有影响要么全部保留,要么全部消失。 尽管组件、系统或通信出现故障,提交过程仍能确保这一结果。
Db2 使用两阶段提交流程在子系统之间进行通信。 两阶段提交流程由一个名为协调器的子系统控制。 其他参与的系统称为参与者。 Db2 , CICS® ,或 WebSphere® Application Server 与 Db2 互动时,始终是协调人。 在涉及这些系统的交易中, Db2 始终是参与者。 Db2 在与TSO交互时,它始终是协调者,而 则完全控制着这些交互中的提交过程。 Db2 在与其他数据库管理系统(包括其他 Db2 子系统)交互时,您的本地 Db2 可以作为协调者或参与者。
下图展示了两阶段提交流程。 协调员(IMS、 CICS 或 Db2 )的活动显示在上行,参与者活动显示在下行。图 1。 说明与另一个子系统协调的提交的时间线
以下数字与图表中的时间轴一一对应。 参与者的更新操作状态显示在两行之间。
- 协调器中的数据处于一致状态。
- 协调器中的应用程序通过执行SQL语句,调用参与者更新一些数据。
- 这会在参与者体内启动一个恢复单元。
- 在协调器中继续处理,直到达到应用程序同步点。
- 协调员随后开始提交处理。 IMS 可以通过DL/I CHKP调用、快速路径SYNC调用、对I/O PCB的GET UNIQUE调用或正常应用终止来实现。 CICS 使用SYNCPOINT命令或正常应用程序终止。 Db2 应用程序通过SQL COMMIT语句或正常终止开始提交处理。 提交处理的第一阶段开始。
- 协调员通知参与者,准备提交。 参与者开始第一阶段处理。
- 参与者成功完成第一阶段,在日志中记录这一事实,并通知协调员。
- 协调员收到通知。
- 协调员成功完成第一阶段处理。 现在,两个子系统都同意提交数据更改,因为它们都已完成第一阶段,并且可以从任何故障中恢复。 协调员在日志中记录下做出承诺的时刻——两个子系统做出不可撤销的更改决定。
协调员现在开始处理第二阶段——实际承诺。
- 协调员通知参与者可以开始第二阶段。
- 参与者记录第2阶段开始的时间。
- 第二阶段已成功完成,这为参与者树立了新的目标。 参与者随后通知协调员已完成第二阶段。
- 协调员完成第二阶段处理。 现在,这两个子系统控制的数据是一致的,可供其他应用程序使用。
在某些情况下,当自上次提交流程完成以来,参与者资源未发生任何变化时,协调员会联系参与者。 例如,当执行一系列SELECT语句后发出SYNCPOINT,或者发出SYNCPOINT后立即到达任务结束时,就会发生这种情况。 当这种情况发生时,参与者会在第一个提交阶段执行两阶段提交的两个阶段,并记录用户或作业在参与者处为只读。