首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于检索上次执行的DB2语句的System运行时表

用于检索上次执行的DB2语句的System运行时表
EN

Stack Overflow用户
提问于 2017-07-17 12:20:09
回答 1查看 742关注 0票数 1

大型机中是否有DB2系统表-批处理运行时日志?在i系列的DB2中,有一个表函数QSYS2.GET_JOB_INFO(),它在运行时返回作业信息,包括状态(Active /Complete),最重要的是最后一次运行的V_SQL_STATEMENT_TEXT语句。

场景:我想在Cobol批处理作业中检索运行时最后执行的SQL语句。这样做的主要目的是在作业运行时确定是否发出了提交或回滚。其目的是创建小程序,让我们称其为“控制器”,在提交或提交间隔发出时监控DB2,甚至是回滚。更具体地说,这个“控制器”将充当迷你操作系统,并具有触发主程序的能力。

例如,如果主程序发出回滚,则“控制器程序”可以发出特定的业务逻辑并控制更新。可以在T1和T2类型的DB2连接中进行更新。通过这种方式,更新是在运行在EXCI中的批处理客户端或Java端完成的(EXCI使用RRS恢复)。

EN

回答 1

Stack Overflow用户

发布于 2017-07-17 23:59:06

IBM Documentation for DB2中快速查看一下似乎表明“不”。

然而,虽然不完全符合您的情况,但以下是我们过去所做的…

创建一个表,将其称为具有列的APP_RESTART_DATA,以唯一地标识流程的执行。我们使用PROC_NAMESTEP_NAME,因为我们被限制在批处理作业中。还有一个KEY列和任何其他在重启情况下可能会有帮助的元数据。有些人存储记录编号,而不是实际的键值。

在控制器程序中,首先使用您的唯一标识符执行SELECT,以确定您是否处于重启模式。如果您的SQLCODE为0,那么您将处于重新启动模式,并且将检索到成功执行COMMIT的最后一个密钥。在这些情况下,您必须在输入数据中找到该键,然后立即开始对随后的数据进行正常处理。如果您的SQLCODE为100,则您不处于重新启动模式;在这种情况下,您可以从输入数据的开头开始正常处理。

在处理输入数据并到达COMMIT点时,还要使用新密钥UPDATE您的APP_RESTART_DATA表。然后是COMMIT。我们的COMMIT点还由一个参数指示,该参数指示在COMMITs之间处理多少逻辑工作单元。如果需要在主要班次期间运行批处理过程,我们可以减少此参数。

完成输入数据的处理后,在APP_RESTART_DATA表中对流程的行执行DELETE操作。

捕获ROLLBACK可能会很棘手。在代码中完成时,您可以在APP_RESTART_DATA中将行标记为已执行ROLLBACK,但如果在abend情况下隐式完成,您可能会发现自己通过语言环境CEEHDLR可调用服务注册了一个条件处理程序,以便您获得控制权并指示发生了ROLLBACK

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45135934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档