您自定义的 CICS 关闭辅助程序
在正常或立即关机时,CICS® 通常会在关机的第一个静止阶段运行关机辅助事务。 关闭辅助事务的目的是确保尽可能多的任务在合理的时间内提交或干净利落地退出。 缺省关闭辅助事务是 CESD ,它将启动 CICS提供的程序 DFHCESD。 DFHCESD 尝试使用越来越强的技术来清除和回退长时间运行的任务。 如果要使用自己的关机辅助程序,可在 SDTRAN 系统初始化参数或 PERFORM SHUTDOWN 和 PERFORM SHUTDOWN IMMEDIATE 命令的 SDTRAN 选项中指定关机事务的名称。
- 在正常关闭时, CICS 会等待所有正在运行的任务完成,然后再进入停顿的第二阶段。 长时间运行或对话式事务可能会导致不可接受的延迟或需要操作员干预。
- 在立即关闭时, CICS 不允许运行中的任务完成,并且直到紧急重新启动后才会执行回退。 这可能导致无法接受的工作单元数被舍入,并且不必要地保留锁定。
根据 CICS 提供的示例编写自己的关机辅助程序
DFHCESD 是由 CICS 提供的默认关机辅助程序。 默认程序的源代码版本以汇编语言形式提供,位于 COBOL 和 PL/I 目录 CICSTSnn.CICS.SDFHSAMP 下, CICSTSnn 具体路径取决于您的 CICS 版本号。 例如,库文件为CICSTS64。 CICS.SDFHSAMP对应 CICS TS beta版本。 这些示例程序分别命名为DFHCESD、 DFH0CESD 和DFH$CESD。 所有这些都包含相同的逻辑。 DFH0CESD 和DFH$CESD的资源定义及其关联事务 SDA1 与 SDA2 位于示例CSD组DFH$SDAP中。 DFHCESD 和 CESD 的定义在 DFHSDAP CSD 组中(包含在默认启动组列表 DFHLIST 中)。
默认关机辅助程序 DFHCESD 在 CICS 关机期间执行的操作在 关机辅助程序 (DFHCESD) 中有详细说明。
- 修改程序。 您可以使用的 EXEC CICS API 和 SPI 命令没有任何限制,只是 EXEC CICS START 只能启动已关闭的程序。
- 如有必要,请修改 DFH$SDAP 或 DFHSDAP 组中提供的资源定义。 (例如,您可以决定以不同于样本的方式命名您的事务和程序) 在提供的事务定义中,命令和资源安全(由 CMDSEC 和 RESSEC 属性指定)未激活。
- 确保 DFH$SDAP 或 DFHSDAP 组(视情况而定)包含在启动组列表中。
- 在 SDTRAN 系统初始化参数中指定关机辅助事务的名称。
当重启管理器 (ARM) 处于活动状态时,如果在关机处理过程中使用默认的关机辅助程序,则 ARM 会在 CICS 区域完成关机后重新启动该区域。 如果不想让 ARM 重新启动 CICS 区域,请修改示例关机辅助程序,在 EXEC CICS PERFORM SHUT IMMEDIATE 命令中添加 NORESTART 选项。
停机协助计划的注意事项
关机辅助任务是一项系统任务,其行为与用户任务不同。 如果所有用户任务都已结束,关机将继续尽快完成,CICS 不会等待关机辅助程序完成。
如果您的关机辅助程序失去控制,然后所有用户任务都终止了,那么在关机完成之前,控制权可能不会回到程序手中。 例如,如果在程序中编码了 EXEC CICS DELAY、WAIT EXTERNAL 或 SUSPEND 命令,而所有用户任务都在间隔时间结束前完成,则程序不会重新获得控制权。 如果您的程序更新了可恢复资源,则应牢记这一点,因为如果程序失去控制,然后所有用户任务都完成了,则无法保证完全提交和退出保护。 可能导致程序失控的 EXEC CICS 命令并不局限于这里提到的那些。
在程序中编码的 EXEC CICS DELAY 命令上指定 REQID(DFHCESD) 后,如果所有用户任务都在延迟时间间隔内完成,则未过期的 DELAY 请求将提前失效。 在这种情况下,即使所有非系统任务都已完成,程序仍会从 EXEC CICS 命令中重新获得控制权。 但请注意,当程序重新获得控制权时,整个间隔时间可能还没有结束。 如果在所有用户任务完成后才发出 EXEC CICS DELAY 命令,它可能永远不会过期,因为 CICS 关机仍在继续,不会恢复系统任务。