避免 AEY9 异常终止

如果应用程序在未启用 CICS® DB2® 连接设施时发出 EXEC SQL 命令,那么将发生 AEY9 异常终止。

关于此任务

您可以使用以下 CICS 命令来检测是否启用了 CICS DB2 连接设施:

EXEC CICS EXTRACT EXIT PROGRAM('DFHD2EX1')
ENTRY('DSNCSQL')
GASET(name1)
GALENGTH(name2)
如果指定程序名 DSNCEXT1 或 DSN2EXT1 CICS 动态地将其更改为所需的名称 DFHD2EX1。 如果获得 INVEXITREQ 条件,那么不会启用 CICS DB2 连接设施。

启用 CICS DB2 连接设施时,它不一定连接到 DB2。 它可能正在等待 DB2 初始化。 发生此情况时,如果在 DB2CONN中指定了CONNEC威胁 = abend ,那么应用程序将发出 EXEC SQL 命令,这将导致 AEY9 异常终止。 CONNECIR=SQLCODE 将导致 -923 SQL 代码返回到应用程序。

可以将 INQUIRE EXITPROGRAM 命令与 CONNECTST 关键字一起使用,以代替 EXTRACT EXIT 命令来确定 CICS 是否已连接到 DB2。

INQUIRE EXITPROGRAM 命令的 CONNECTST 关键字返回值:
  • CONNECTED ,当 CICS DB2 连接设施准备好接受 SQL 请求时
  • NOTCONNECTED ,当 CICS DB2 连接设施未准备好接受 SQL 请求时。

如果命令失败并带有 PGMIDERR ,那么这与 NOTCONNECTED 相同。

图 1 显示了使用 INQUIRE EXITPROGRAM 命令的汇编程序代码示例。
图 1。 INQUIRE EXITPROGRAM 命令的示例
CSTAT DS F
						ENTNAME DS CL8
						EXITPROG DS CL8
						...
						MVC ENTNAME,=CL8'DSNCSQL'
						MVC EXITPROG,=CL8'DFHD2EX1'
						EXEC CICS INQUIRE EXITPROGRAM(EXITPROG) X
						ENTRYNAME(ENTNAME) CONNECTST(CSTAT) NOHANDLE
						CLC EIBRESP,DFHRESP(NORMAL)
						BNE NOTREADY
						CLC CSTAT,DFHVALUE(CONNECTED)
						BNE NOTREADY
					

如果指定程序名 DSN2EXT1,那么 CICS 会将其动态更改为所需的名称 DFHD2EX1。

在使用 z/OS® 工作负载管理器 (WLM) 进行动态工作负载均衡的环境中运行时,必须进一步考虑应用程序使用 EXTRACT EXIT 或 INQUIRE EXITPROGRAM 命令。

对 DB2 的可用性进行测试可能会导致 "风暴漏出效应"。 如果应用程序在与工作负载管理器的连接不可用时正常返回,那么可以将工作负载管理器加入到将更多工作路由到 CICS 区域中,因为它认为正在实现良好的响应时间。 有关漏风效应的说明,请参阅 避免漏风效应。 因此,建议您执行以下操作:
  • 在 DB2CONN中指定 STANDBYMODE=RECONNECT。 这将确保 CICS DB2 连接设施 (在备用方式下) 等待 DB2 自动初始化和连接,如果首次尝试连接时 DB2 关闭。 此外,如果 DB2 随后失败,那么 CICS DB2 连接设施将再次还原为备用方式,并等待 DB2 。 然后,当 DB2 返回时,它将自动连接。
  • 如果应用程序正确处理 -923 代码,请使用 CONNECIR=SQLCODE。
  • 如果可以使用CONNEC威胁 = SQLCODE ,请避免使用 EXTRACT EXIT 或 INQUIRE EXITPROGRAM 命令。
  • 如果需要 AEY9 异常终止,请使用CONNEC资助 = abend。 使用 INQUIRE EXITPROGRAM 命令而不是 EXTRACT EXIT 命令。
  • 值得注意的是,即使在下列情况下指定了 STANDBYMODE=RECONNECT 和CONNEC威胁 = SQLCODE ,仍会发生 AEY9 异常终止:
    • 从未启动 CICS DB2 连接设施。 如果应用程序发出 EXEC SQL 命令,那么会产生 AEY9 结果。 您应该始终在 SIT 中指定 DB2CONN=YES ,或在 PLTPI 中指定程序 DFHD2CM0 。 因此, CICS DB2 连接至少处于备用方式。
    • 使用 DSNC STOP 或 CEMT/EXEC CICS SET DB2CONN NOTCONNECTED 命令关闭 CICS DB2 连接。
建议避免关闭附件。 CICS DB2 SPI 命令允许动态修改环境而不关闭连接。