排除CICS事务网关中的PGMIDERR/AEI0 ABEND故障

日期: 2010-04-18 作者:Robert Crawford翻译:黄永兵 来源:TechTarget中国 英文

CICS事务网关(CICS Transaction Gateway ,CTG)提供的Java客户端简化了与CICS之间的通信,大多数情况下,它象是一个通过外部调用接口与CICS通信的黑盒子,因此出现问题进行故障诊断时比较麻烦,本文就介绍一下如何处理程序没有找到(PGMIDERR)和AEI0 ABEND错误。   接收CTG中的原始PGMIDERR/AEI0 ABEND错误   CTG客户端指定一个统一资源定位符(URL)和一个目标程序名连接到CTG,客户端还包括一个事务和CICS应用程序ID,所有通过CTG驱动的事务必须定义CICS镜像程序(DFHMIRS)作为它的原始程序。   当消息抵达时……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

CICS事务网关(CICS Transaction Gateway ,CTG)提供的Java客户端简化了与CICS之间的通信,大多数情况下,它象是一个通过外部调用接口与CICS通信的黑盒子,因此出现问题进行故障诊断时比较麻烦,本文就介绍一下如何处理程序没有找到(PGMIDERR)和AEI0 ABEND错误。

  接收CTG中的原始PGMIDERR/AEI0 ABEND错误

  CTG客户端指定一个统一资源定位符(URL)和一个目标程序名连接到CTG,客户端还包括一个事务和CICS应用程序ID,所有通过CTG驱动的事务必须定义CICS镜像程序(DFHMIRS)作为它的原始程序。

  当消息抵达时,CICS附加目标事务,调用DFHMIRS,DFHMIRS从消息头提取应用程序名称,并尝试连接,如果程序是可执行的,一切就会按计划执行,如果出现问题,DFHMIRS返回诸如“程序未找到”或PGMIDERR,或AEI0 ABEND等错误给客户端,最后,当它看到变量eci_abend_code置为AEI0时,就知道客户端接收到了错误消息。

  诊断PGMIDERR/AEI0 ABEND的步骤

  听起来感觉很容易诊断,但试图找出错误时却会遇到很多问题,当DFHMIRS连接目标程序失败时,它会静静地向CTG发送一个错误,但不会向CICS日志写入任何消息,CTG可以识别这些问题,但在默认的跟踪级别,除了在它内部的跟踪表中,不会在其它地方记录日志。最后,在拥有多个CTG和路由区的CICSPlex环境中,不会说出错误的发生位置。

  解决这个问题首先要找出出错的客户端消息,有以下几种办法:

  1、网络跟踪法:最不喜欢的是使用网络跟踪,不仅要查看海量数据,一旦发现错误消息,必须与原始请求进行匹配,这种办法的好处是不用浸入到复杂的大型机环境。

  2、CICS跟踪法:稍微配置以下,CICS或GTF跟踪可以快速地精确定位问题,但对于在大型CICSPlex环境中的一个间歇性错误,需要跟踪很多区域,时间可能不允许,如果跟踪管理捕捉到错误,仍然有海量的输出数据需要查看,最后是大家都知道的,跟踪对性能有影响。

  3、CTG跟踪法:在最新的CTG版本中跟踪可以用一个修改的命令操作,此外,CTG将会把跟踪信息写入到SSYSOUT,使它更容易阅读,但要捕捉到错误,你可能要在多个CTG实例上开启四级跟踪。这个方法和CICS跟踪有一样的缺点,特别是在复杂的环境下。

  4、转储CTG法:转储CTG是最简单,最直接的方法,如果你运行了多个CTG实例,那么每一个都要转储,转储命令必须包括MVS地址空间和附加的OMVS进程。

  无论哪种方法,使用程序名称是最快的,但程序名称很可能是无效的,例如,消息中的持续名称可能包括非法字符,或是未以非空字符结束。如果程序名称无效,要找到错误需要两个步骤:

  1. 登录到CICS,寻找程序的定义;
  2. 当你找到程序正确的定义时,你一定会想用头磕桌子。

  原来是因为引起AEI0 ABEND的原因有很多,包括但不限于:

  1. 当CICS知道它应该将请求转发到另一个区域,但没有任何可用的线路时产生了DLP错误;
  2. 目标程序在目标AOR上被禁用了;
  3. 在极少数情况下,当事务让它通过路由区,但在目标AOR上遇到了安全错误。

  要找到上述错误的根本原因,除非还有其它诊断信息可用,否则唯一的办法只有使用CICS跟踪。

  虽然CICS和CTG不约而同地隐藏了错误,但用户仍然可以记录一些事件,例如,一个自定义动态路由程序在发生路由错误和DTR错误字段置为c’7’时可以记录消息,有些全局用户在退出时的事件也可以观察到和记录。最后的办法是确保错误不再发生。

作者

Robert Crawford
Robert Crawford

数据中心专家