CICS DBCTL 环境中的组件故障

本部分讨论 CICS®-DBCTL 环境的不同组件的故障以及事务和线程故障的影响。

CICS 失败

如果 CICS 失败,那么 DBCTL 将保留对不确定 UOW 更新的数据库记录的锁定。 在解决疑问之前,这些记录将保持不可用状态。 CICS 在其日志中记录有关 UOW 处置的信息。

CICS 热启动或紧急重新启动会重新构造描述可能不确定的 UOW 的信息。 当 CICS 重新连接到 DBCTL 时, DBCTL 将返回任何不确定 UOW 的列表。 CICS 将通知 DBCTL 所有疑问的解决方法,因此 DBCTL 可以根据需要落实或回退。

如果 CICS 失败,或者如果需要立即关闭,那么 CICS 会尝试与 DBCTL 断开连接。 此时, CICS 会提供正在进行的请求在发生关闭之前完成的时间。 该时间在 DRA 启动表参数 TIMEOUT 中指定。 (有关此参数的信息,请参阅 定义 IMS DRA 启动参数表。) 如果超过 TIMEOUT 并且当线程在 DBCTL 中仍处于活动状态时 CICS 终止,那么将发生 DBCTL 的 U113 异常终止。 如果发生这种情况,您将必须重新启动 DBCTL (IMS)。

选择 TIMEOUT 的值需要在重新启动过程的长度之间进行权衡,如果指定的值过高,那么可能会延迟重新启动过程,而导致 U113 异常终止的风险也会增加,如果指定的值过低,那么可能会增加此风险。 一种可能的解决方案是指定大约等于 BMP 检查点之间的平均时间长度的 TIMEOUT 值。 如果已采用 BMP 检查点,那么 CICS 资源等待的可能性较小。 这将降低 U113 异常终止的可能性,而不会过多延长重新启动过程。

如果您希望 CICS 异常终止并且 CICS 不响应立即关闭,请使用 z/OS® CANCEL 命令。 此命令和 CICS 异常终止的原因不同,不应导致 IMS U113 异常终止,因为 DBCTL 会捕获 CANCEL 和 z/OS 系统异常终止代码08E而是发出。 将 z/OS CANCEL 的影响从 U113 异常终止更改为 z/OS 系统异常终止08E使 CANCEL 的效果更像 CICS 立即关闭的效果。 如果您必须以这种方式取消 CICS ,请不要使用 START = INITIAL 系统初始化参数来启动 CICS ,除非绝对必要,尤其是如果 DBCTL 可能存在不确定工作单元的情况,因为 CICS 将丢失其不确定工作单元的记录。

有关 DBCTL 环境中 CICS 故障的影响的更多信息,请参阅相应 IMS 产品文档中的 "出口例程"中有关 CCTL 终止的部分。

数据库资源适配器 (DRA) 故障

如果 DRA 失败:
  • DBCTL 通知 CICS DRA 正在异常终止,并发出消息 DFHDB8106
  • CICS 清除与 CICS-DBCTL 接口关联的存储器,并断开与 DBCTL 的连接。
  • 完成此操作后, CICS 将发出消息 DFHDB8102
  • 然后必须使用 CDBC CONNECT 命令重新连接 DBCTL。

DBCTL 故障

DBCTL 的终止不应导致 CICS 终止,它会使 CICS 没有 DBCTL 服务。 DRA 保持部分初始化,以帮助减少重新启动时间。

如果任何 DBCTL 地址空间 (DBC , DBRC 或 DLISAS) 发生故障,那么将终止所有这些地址空间,并且必须使用 /ERESTART 命令重新启动系统。

如果要将 IRLM 用作锁定管理器,并且它已失败以及 DBCTL ,那么必须在重新启动 DBCTL 之前将其重新启动。

通常,您使用 /CHECKPOINT 冻结或 /CHECKPOINT PURGE 命令来终止 DBCTL ,但可以使用 z/OS MODIFY 命令来强制终止 DBCTL。 与 MODIFY 命令配合使用的 STOP 选项强制终止而不进行转储,而 DUMP 选项强制终止而进行转储。 DBCTL 地址空间由于 U0020 异常终止而终止。 在系统控制台上接收到的消息包括:
DFS628I 已调度异常终止 DFS629I  
IMS DBC REGION ABEND 作业名 0020
如果 DL/I 正在处理请求,并且正在执行处理异常终止的线程在 DL/I 中处于活动状态或正在等待锁定,那么在将以下消息发送到系统控制台之后, DBCTL 将异常终止并带有 U113 :
DFS613I DBC RCN U113 DUE TO Sxxx Uyyyy DURING DL/I CALL IN CCTL
         扎兹兹山 /zzzzzz ddd
其中:
xxx
是系统异常终止代码。 如果是用户异常终止,那么这是 S000
yyyy
是用户异常终止代码。 如果是系统异常终止,那么这是 U0000
zzzzzzzz
是异常终止的 CICS 系统或 BMP 的作业名。
dddd
是 DBCTL 系统标识。
例如,对于用户异常终止:
DFS613I  DBC RCN U113 DUE TO S000 U0474 DURING DL/I CALL IN CCTL
         DBDCCICS IMSA

CICS 与此类异常终止隔离,因为在 DBCTL 中,每个线程 TCB 都有自己的扩展子任务 ABEND 出口 (ESTAE)。

然后,将终止这些线程,并且 DRA 将尝试重新连接到 DBCTL。 在此期间,子系统发出的任何请求都会产生返回码 40 (指示不存在与 DBCTL 的活动通信) 或返回码 28 (指示指定的线程不存在)。 这些返回码包含在消息 DFHDB8104, DFHDB8109, DFHDB8111和 DFHDB8130中。 有关解释它们的指导信息位于 IMS 产品文档中的 IMS 消息和代码的 DBCTL DRA 返回码部分。

DRA 尝试重新连接到 DBCTL。 第一次尝试失败后,您将有机会回复消息 DFS690A。 您可以应答 WAIT (在这种情况下, DRA 继续尝试重新连接) 或 CANCEL (在这种情况下, DRA 停止尝试重新连接)。 如果回复 CANCEL ,那么必须使用 CDBC 事务来重新连接 DBCTL。

如果应答 WAIT ,那么每次尝试重新连接之间的时间间隔如 DRA 启动参数 TIMER 中所指定 (如 定义 IMS DRA 启动参数表中所述)。

如果您应答 WAIT 并且以后想要阻止进一步尝试重新连接,请使用 CDBC DISCONNECT 事务。 (请参阅 决定是使用有序断开连接还是立即断开连接。)

IRLM 故障

当 IRLM 失败时,使用它的 DBCTL 子系统无法继续正常操作。

DBCTL 终止正在使用具有 U3303 异常终止的 IRLM 的活动程序,并强制任何 PSB 调度请求等待,直到它已重新连接到 IRLM。 通过首先使用 z/OS START 命令重新启动 IRLM ,然后向 DBCTL 发出 z/OS MODIFY RECONNECT 命令,将 DBCTL 重新连接到 IRLM 。 有关将 z/OS 命令与 IRLM 和 DBCTL 配合使用的指导信息,请参阅 IMS 产品文档中的操作和自动化

事务和线程故障

如果事务在 DBCTL中失败,那么 CICS 事务将异常终止。

当在 DBCTL 中处理事务发出的 DL/I 请求时,如果事务在 CICS 中失败,那么会将错误传递到 DBCTL 线程。 当事务终止时,将释放分配给它的线程,并将记录写入 IMS 日志。 如果发生错误,将以通常的形式向应用程序返回返回码:

如果事务已异常结束,那么线程也将终止,并且将回退所有可恢复资源 (包括 DL/I)。 (假定所有线程和事务失败时都存在 DL/I 回退。)

在某些情况下,其他资源可能未回退,但已发生 DL/I 回退。 在这些情况下,将返回以下状态码之一 :BB , FD , FR , FS。 如果程序 (BMP) 的 PSB 具有 DEDB PCB ,那么您还可以在调用完整函数数据库时接收 FD 状态码。 请参阅 状态码和回退 ,以了解在发生此情况时应执行的操作。

另请参阅 Deadlocks and actions with automatic restart

BMP 故障

如果 BMP 失败,那么 DBCTL 会在最近的成功同步点之后回退该 BMP 所做的任何更改。 必须重新启动 BMP ,因为 DBCTL 不会自动重新启动这些 BMP。

用于重新启动 BMP 的 JCL 取决于 BMP 的检查点是否仍位于可供 DBCTL 使用的 OLDS 上。 如果 BMP 的最后一个检查点记录 不在 OLDS 中 ,那么它们将位于 SLDS 中,并且您必须为包含 BMP JCL 所需的日志记录的 SLDS 添加 IMSLOGR DD 语句。 IMS 产品文档中的数据库实用程序中提供了有关执行此操作所需的 JCL 的指导信息。

可以选择在紧急重新启动时通过回退 BMP 来延迟对数据库所作的更改。 如果在 /ERESTART 命令上指定 NOBMP ,那么不会回退 BMP 对数据库所作的更改,并且所有受影响的 PSB 都将停止。 发生故障时由 BMP 更新的数据库也将停止。 然后,必须对已停止的数据库执行批处理回退。 (批处理回退还将回退受影响的数据库。) 请注意,使用 NOBMP 可能意味着联机 DBCTL 会更快地重新启动,但这也会延迟因 BMP 故障而停止的数据库的数据可用性。

z/OS,处理器或电源故障

如果发生 z/OS,处理器或电源故障,那么 DBRC 无法将 RECON 中的子系统 (SSYS) 记录标记为异常终止。 这意味着您无法使用自动重新启动。 相反,必须将 /ERESTART 命令与 OVERRIDE 关键字配合使用,以覆盖 RECON 子系统记录。 或者,使用 DBRC 命令 CHANGE.SUBSYS 将子系统记录标记为异常终止。

如果要运行任何实用程序 (例如数据库恢复或日志实用程序) ,那么将需要执行此操作。 这是因为如果子系统记录仍标记为活动,那么这些实用程序将失败。 有关执行此操作的信息,请参阅 IMS 产品文档中的数据库实用程序。 然后应该回退进行中的更新。 然后,可以在 AUTO (紧急) 重新启动的情况下重新启动 CICS 。 当 CICS 已重新连接到 DBCTL 时, CICS 将决定是否存在任何不确定的 UOW ,并以与其他故障相同的方式解决这些 UOW。