DB2 System Runtime Table,用于检索上次执行的SQL语句

时间:2017-07-17 04:20:09

标签: java db2 cobol db2-zos

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

方案: 我想在Cobol Batch Job中运行时检索最后执行的SQL语句。这样做的主要目的是确定在作业运行时是否已发出COMMIT或ROLLBACK。目的是创建一个小程序,让我们称之为“控制器”,在发出Commit或Commit interval时监视DB2,甚至回滚。更具体地说 - 这个“控制器”将充当迷你操作系统,并具有触发主程序的能力。

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

1 个答案:

答案 0 :(得分:0)

快速查看map(_:)似乎表示“不”。

然而,虽然不是完全匹配您的情况,但这是我们以前做的......

创建一个表,使用列调用它APP_RESTART_DATA以唯一标识进程的执行。我们使用PROC_NAMESTEP_NAME,因为我们只限于批处理作业。还有一个KEY列以及在重启情况下可能会发现有用的任何其他元数据。有些人存储了记录号而不是实际的键值。

在您的控制器程序中,首先使用您的唯一标识符执行SELECT以确定您是否处于重启模式。如果得到SQLCODE为0,则表示您处于重启模式,并且将检索已成功执行COMMIT的最后一个KEY。在这些情况下,您必须在输入数据中找到该键,然后立即开始正常处理数据。如果您的SQLCODE为100,则表示您未处于重启模式;在这些情况下,您可以在输入数据开始时开始正常处理。

当您处理输入数据并到达COMMIT点时,UPDATE表{@ 1}}表示新的KEY。然后是APP_RESTART_DATA。我们的COMMIT点也由一个参数决定,该参数指示在COMMIT之间处理多少逻辑工作单元。如果必须在正常运行的主要班次期间运行批处理,我们可以减少此参数。

完成输入数据的处理后,COMMITs DELETE表中的流程行APP_RESTART_DATA

捕获ROLLBACK可能会非常棘手。您可以将APP_RESTART_DATA中的行标记为在代码中执行ROLLBACK,但如果在异常情况下隐式执行,您可能会发现自己通过语言环境注册条件处理程序{{3} } callable service,因此您可以获得控制权并可以指示ROLLBACK已发生。