有两个PGM
- COBOL CICS(主程序),读取mq队列,触发事务并发送响应。
- Cobol CICS DB2(子程序),将mq详细信息记录到主程序中创建的DB2表中。
问题在于,在uow结束时,只有最后插入到表中的数据(来自Sub pgm)被提交,而不是以前从以前的调用中插入的数据。
我也用显式提交进行了测试,但是结果是一样的。但是如果我们在PGM 2中给予syncpoint,它可以工作,但是最终会崩溃其他从另一个子PGM对vsam文件所做的更新。
主程序(读MQ,写MQ)-〉子程序(将MQ细节(Q/R)记录到DB2表)在插入后返回控制。
有什么帮助吗?
1条答案
按热度按时间y4ekin9u1#
OK --EXEC CICS LINK和两个程序都在同一个CICS区域中执行,那么任务自动具有跨所有资源管理器(MQ和Db2)的事务性。您的程序可以通过显式发出EXEC CICS SYNCPOINT命令或EXEC SQL COMMIT命令来干扰这一点。
我不确定我是否清楚你所说的“触发事务”作为你的主程序中的一个动作是什么意思。你所说的“事务”是指一个工作/恢复单元还是指一个新的CICS任务?这个触发是如何完成的?
如果你的心流只是:
此时,Db2表应该有多个插入的行。
您可以选择在每个MQPUT命令之后发出SYNCPOINT/COMMIT,以使回复立即流动并将更新提交到Db2表。(原始输入MQ消息也将从队列管理器中永久删除。)
如果这些程序仍有问题,请尝试让同事查看这些程序,以了解您可能在何处引入了错误。
如果您认为CICS和/或Db2出现了故障,您可以向IBM Support提交案例以获得更多帮助。