解析不确定的工作单元 (UOW)
当 CICS®, Db2®或整个系统在事务执行同步点处理期间 (即在处理 EXEC CICS SYNCPOINT 或 EXEC CICS RETURN 命令期间) 发生故障时,可能会发生不确定工作单元 (UOW)。 在重新建立 CICS 与 Db2 之间的连接时,通常会解析不确定的 UOW。
如果涉及多个可恢复资源,那么 CICS 在尝试落实 UOW 时使用两阶段落实协议。 在将 "yes" 回复到阶段 1 准备调用之间,以及在阶段 2 接收落实或回退调用之前, Db2 对于 UOW 的结果是不确定的。 如果此时发生故障,那么 Db2 将对 UOW 保持不确定状态; 它具有不确定的 UOW ,并且必须要求 CICS 再同步。
在工作单元仅涉及 Db2 和单个 CICS 系统的情况下, CICS 始终是协调程序。 如果涉及更多参与方 (例如,通过 LU6.2 通信链路) ,那么远程 CICS 系统可能是工作单元的整体协调程序,而不是本地 CICS 系统。 在这种情况下, Db2 和本地 CICS 系统都可能不确定 UOW 的结果。 如果在此情况下发生故障,那么本地 CICS 系统可能会根据事务的定义来分流工作单元。 然后,工作单元被认为是被回避的。
在重新建立 CICS 与 Db2 之间的连接时,通常会自动解析不确定的 UOW。 CICS 和 Db2 交换有关不确定 UOW 的信息; 即, CICS 通知 Db2 UOW 是已回退还是已落实。 如果 UOW 被搁置不确定,那么将延迟此信息交换,直到远程协调程序通知 CICS 结果为止。 但是,如果您正在使用组连接,那么 CICS 可能会重新连接到另一个 Db2 子系统,并且无法交换有关先前连接的 Db2 子系统所持有的不确定 UOW 的信息。 DB2CONN 定义的 RESYNCMEMBER 属性用于解决此问题。
使用组连接时解析不确定的 UOW
如果您正在使用组连接,并且 CICS 与 Db2 之间的连接中断,那么 CICS 可能不会重新连接到同一个 Db2 子系统; 它可能会选择 Db2 子系统的数据共享组的另一成员。 这意味着如果不确定的 UOW 正由 CICS 连接到的第一个 Db2 子系统挂起,那么无法解析这些 UOW。
- 如果未保存任何未完成的 UOW 信息,并且 CICS 未执行紧急重新启动,那么组连接将正常运行,并为连接选择数据共享组的任何活动成员。 如果 CICS 已执行紧急重新启动,那么 CICS 会尝试连接到上次连接到的成员。
- 如果正在保存未完成的 UOW 信息,那么下一个操作取决于您为 DB2CONN 定义的 RESYNCMEMBER 属性选择的设置。
- 如果 RESYNCMEMBER 设置为 YES ,指示您需要与上次记录的 Db2 数据共享组成员再同步,那么 CICS 将忽略组连接设施,并且 CICS Db2 连接设施将等待,直到它可以重新连接到上次连接的 Db2 数据共享组成员,以解决不确定的工作单元。 由于 CICS 本身此时无法解析这些 UOW ,因此作为搁置的不确定 UOW 不会包含在此过程中。 当 CICS 与其远程协调程序进行再同步时,会重新同步那些 UOW。
- 如果 RESYNCMEMBER 设置为 NO ,可能是因为您希望尽可能快地重新连接,那么 CICS 会尝试重新连接到上次记录的 Db2 数据共享组成员。 如果此尝试成功,那么可以解析不确定的 UOW (作为搁置的不确定的 UOW 除外)。 如果失败,那么 CICS 将使用组连接来连接到 Db2 数据共享组的任何活动成员,并且将发出警告消息 DFHDB2064 ,指示可能存在具有最后记录的成员的未解决不确定 UOW。
请参阅 DB2CONN 资源 ,以获取有关设置 RESYNCMEMBER 的信息。 还可以使用 SET DB2CONN RESYNCMEMBER 命令设置 RESYNCMEMBER 选项。
使用 Db2 restart-light 来解析不确定的 UOW
CICS 支持 Db2中提供的增强型 Db2 轻量级重新启动功能。 轻量级重新启动方式用于在发生 z/OS® 系统故障时跨系统重新启动,其中 CICS 系统配置为使用组连接 (请参阅 使用 Db2 组连接设施)。
Db2 轻量级重新启动功能允许 Db2 数据共享成员以最小存储占用量重新启动,释放保留锁定,然后正常终止。 这适用于正在运行的工作单元和不确定的工作单元。 这意味着 CICS 系统可以连接到 Db2 轻量级重新启动子系统,以便再同步不确定的 UOW。 这尤其有用,因为 Db2 不支持对等恢复; 即,一个 Db2 子系统无法代表另一个 Db2 子系统再同步不确定的 UOW。
在典型场景中,如果 z/OS LPAR 失败,那么可以启动跨系统重新启动,这包括在另一个 LPAR 上重新启动失败的 CICS 系统,并以轻量级重新启动方式在该 LPAR 上启动失败的 Db2 子系统。 假定 CICS 系统已配置为使用 DB2CONN 定义上的 RESYNCMEMBER (YES) 和 STANDBYMODE (RECONNECT) 的组连接,并且 Db2中存在未完成的不确定工作单元。 Db2 轻量级子系统初始化,释放任何进行中的 UOW 的保留锁定,然后等待 CICS 对不确定的 UOW 进行再同步。 每个 CICS 系统都会初始化,并检测它是否具有未完成的工作单元以及是否已指定 RESYNCMEMBER (YES)。 如果这两种情况都成立,那么 CICS 系统将忽略组连接,并重新连接到最后一个 Db2 子系统 (即 Db2 轻量级重新启动子系统)。 现在将重新同步不确定的 UOW ,但不允许任何新事务访问 Db2。 在 Db2 轻量级重新启动子系统中解析所有不确定 UOW 后,它将终止。 因为 CICS 系统是使用 STANDBYMODE (RECONNECT) 定义的,所以当 Db2 轻量级重新启动子系统终止时,它们会进入备用方式,并尝试重新连接到 Db2。 现在,由于已解析所有不确定工作单元,因此 RESYNCMEMBER 不适用,并且可以使用组连接。 CICS 系统重新连接到正常的活动 Db2 子系统。
恢复不确定 UOW 的再同步信息
CICS 在其系统日志中维护有关再同步所需的 UOW 的信息。 再同步信息由 CICS 在暖启动,紧急启动和冷启动之间进行维护。
如果在初始化系统日志时执行 CICS 的初始启动并且丢失所有信息,那么将丢失再同步信息,从而删除有关先前工作单元的所有信息。 您应该很少需要初始启动 CICS。 如果要从 CICS 系统定义数据集 (CSD) 重新安装资源,请使用冷启动,这将允许恢复任何再同步信息。 尤其是,如果先前 CICS 发出的热关闭消息 DFHRM0131 指示再同步未完成,那么应避免 CICS 的初始启动。
如果 CICS 是在需要 Db2 再同步时启动的,那么在重新建立 CICS Db2 连接时,将针对未能再同步的每个 UOW 输出消息 DFHDB2001 ,并且必须使用 Db2 RECOVER INDOUBT 命令在 Db2 中再同步该 UOW。