Cobol - CICS DB2 -仅提交最后一次插入

wfypjpf4  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(220)

有两个PGM

  1. COBOL CICS(主程序),读取mq队列,触发事务并发送响应。
  2. Cobol CICS DB2(子程序),将mq详细信息记录到主程序中创建的DB2表中。
    问题在于,在uow结束时,只有最后插入到表中的数据(来自Sub pgm)被提交,而不是以前从以前的调用中插入的数据。
    我也用显式提交进行了测试,但是结果是一样的。但是如果我们在PGM 2中给予syncpoint,它可以工作,但是最终会崩溃其他从另一个子PGM对vsam文件所做的更新。
    主程序(读MQ,写MQ)-〉子程序(将MQ细节(Q/R)记录到DB2表)在插入后返回控制。
    有什么帮助吗?
y4ekin9u

y4ekin9u1#

OK --EXEC CICS LINK和两个程序都在同一个CICS区域中执行,那么任务自动具有跨所有资源管理器(MQ和Db2)的事务性。您的程序可以通过显式发出EXEC CICS SYNCPOINT命令或EXEC SQL COMMIT命令来干扰这一点。
我不确定我是否清楚你所说的“触发事务”作为你的主程序中的一个动作是什么意思。你所说的“事务”是指一个工作/恢复单元还是指一个新的CICS任务?这个触发是如何完成的?
如果你的心流只是:

  • MQ消息到达
  • 主程序开始执行(由MQ消息触发)
  • 主程序从队列中检索项目
  • 主程序链接到子程序
  • 子程序向Db2表发出INSERT命令
  • 子程序返回到主程序
  • 主程序发送MQ应答
  • 主程序从队列中检索下一条消息
  • 主程序链接到子程序
  • 子程序向Db2表发出INSERT命令
  • 子程序返回到主程序
  • 主程序发送MQ应答
  • --可以重复GET、LINK、INSERT、RETURN、PUT序列几次
  • 主程序正常返回/终止

此时,Db2表应该有多个插入的行。
您可以选择在每个MQPUT命令之后发出SYNCPOINT/COMMIT,以使回复立即流动并将更新提交到Db2表。(原始输入MQ消息也将从队列管理器中永久删除。)
如果这些程序仍有问题,请尝试让同事查看这些程序,以了解您可能在何处引入了错误。
如果您认为CICS和/或Db2出现了故障,您可以向IBM Support提交案例以获得更多帮助。

相关问题