避免 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 命令允许动态修改环境而不关闭连接。