大型机中是否有DB2系统表-批处理运行时日志?在i系列的DB2中,有一个表函数QSYS2.GET_JOB_INFO(),它在运行时返回作业信息,包括状态(Active /Complete),最重要的是最后一次运行的V_SQL_STATEMENT_TEXT语句。
场景:我想在Cobol批处理作业中检索运行时最后执行的SQL语句。这样做的主要目的是在作业运行时确定是否发出了提交或回滚。其目的是创建小程序,让我们称其为“控制器”,在提交或提交间隔发出时监控DB2,甚至是回滚。更具体地说,这个“控制器”将充当迷你操作系统,并具有触发主程序的能力。
例如,如果主程序发出回滚,则“控制器程序”可以发出特定的业务逻辑并控制更新。可以在T1和T2类型的DB2连接中进行更新。通过这种方式,更新是在运行在EXCI中的批处理客户端或Java端完成的(EXCI使用RRS恢复)。
发布于 2017-07-17 23:59:06
在IBM Documentation for DB2中快速查看一下似乎表明“不”。
然而,虽然不完全符合您的情况,但以下是我们过去所做的…
创建一个表,将其称为具有列的APP_RESTART_DATA,以唯一地标识流程的执行。我们使用PROC_NAME和STEP_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。
https://stackoverflow.com/questions/45135934
复制相似问题