是否有大型机中的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)中完成。
答案 0 :(得分:0)
快速查看map(_:)
似乎表示“不”。
然而,虽然不是完全匹配您的情况,但这是我们以前做的......
创建一个表,使用列调用它APP_RESTART_DATA
以唯一标识进程的执行。我们使用PROC_NAME
和STEP_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
已发生。