Informix 数据库安装简单,管理方便,性能强大,大量应用在金融电信领域的联机交易系统中。 Informix 提供的一系列管理工具帮助系统管理员快速的监控并收集数据库的信息,快速诊断问题提供了有效的手段。本文介绍使用 onlog 工具在一实际案例中怎么追踪分析事务处理过程,并最终排除系统故障。
onlog 工具简介
onlog 命令可以用来显示 Informix 数据库的逻辑日志内容,在数据库处于 offline 状态时,onlog 命令只读取磁盘上的逻辑日志;而数据库处于 quiescent 或者 online 模式,onlog 还会同时把共享内存中逻辑日志缓冲区的内容一并读出。因此 onlog 对分析追踪数据库在某个交易处理过程中对数据库做了哪些修改,非常有用。
onlog 命令可以带不同的参数来调用,详细的命令说明请参考 Informix 《系统管理员参考手册》。onlog –l 列出了详细的逻辑日志记录,从中可以对一个事务相关动作进行跟踪分析。
onlog –l 的输出中 type 字段包含了该逻辑日志记录的类型,BEGIN 类型记录标志了一个事务的开始,时间是该事务的开始时间。一个完整的事务处理状态在数据库的逻辑日志中是由一个记录序列来记载的,由 BEGIN 型记录开始,以 COMMIT 或 ROLLBACK 型记录结束。如下图 1 所示.
图1.逻辑日志片段示例

应用分析
某银行系统对交易中间件平台做了版本升级,涉及到数个应用系统:核心业务系统、网上银行、IC 卡交易及国际结算。升级之后 IC 卡和网上银行系统出现交易做不了的情况,网上银行系统的跨域交易未能提交到数据库系统( Informix ),中间件层面返回交易超时失败。
经过对数据库进行监控分析,数据库没有任何的故障现象,但是在交易中间件环节除了收到超时失败错误信息,也无法定位更详细的错误情况。
于是便只有从从数据库事务跟踪的层次来追踪在整个事务处理过程中数据库做了哪些动作,用 onlog –l 生成逻辑日志的详细记录,并根据时间找到相应时间段的逻辑日志记录。从下面的逻辑日志片段中,我们找到了与我们失败交易事务时间接近的 addr 为 cfb018、type 为 BEGIN 一条逻辑日志记录;下一条记录是 addr 为 cfb040、type 为 HUPBEF 的记录。

图2.通过日志跟踪事务进程
继续往下可以找到下面的逻辑日志记录信息,addr 为 cfd14c,type 为 XAPRECOM,是 TP/XA 跨库访问的预提交指令,这条记录表明数据库已经做好提交的准备,一旦接受到 COMMIT 指令,则对整个事务进行提交。

图3.查找事务提交时的日志
继续往下检查逻辑日志记录,我们找到一条 XAPRECOM 的后续记录,addr 为 d05050,类型为 ROLLBACK 的记录,数据库在接到 XAPRECOM 指令后,没有做 COMMIT,而是做了一个 ROLLBACK。

图4.查找事务的执行情况日志
检查数据库的 onconfig 配置参数,发现下面的设置:
TXTIMEOUT 0x12c
这是缺省的事务超时时间:5 分钟, Informix 在接受到 XAPRECOM 指令后,等了 5 分中没有收到中间件的的 COMMIT 或 ROLLBACK 指令,对 TP/XA 型事务在超时后自动做出了回滚。
据此判断,交易的失败原因不在数据库层面,客户进一步集中精力在中间件层面进行分析,最终排除了故障。
总结
Informix 的 onlog 命令提供了很好的数据库事务级追踪分析手段,在上面的实际案例应用中有效的通过事务追踪排除了数据库层面的问题,为准确定位问题并促成问题的最终解决提供了诊断手段。
