gpt4 book ai didi

java - 用于检索最后执行的 SQL 语句的 DB2 系统运行时表

转载 作者:太空宇宙 更新时间:2023-11-04 11:19:03 25 4
gpt4 key购买 nike

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

场景:我想在 Cobol 批处理作业运行时检索最后执行的 SQL 语句。其主要目的是确定作业运行时是否已发出 COMMIT 或 ROLLBACK。目的是创建一个小程序,我们称之为“ Controller ”,来监视 DB2 何时发出 Commit 或 Commit Interval,甚至 Rollback。更具体地说,这个“ Controller ”将充当迷你操作系统,并且能够触发主程序。

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

最佳答案

快速浏览 IBM Documentation for DB2似乎表示“不”。

但是,虽然与您的情况不完全匹配,但这是我们过去所做的...

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

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

当您处理输入数据并到达 COMMIT 点时,还会使用新的 KEY UPDATE 您的 APP_RESTART_DATA 表。然后提交。我们的 COMMIT 点也由一个参数决定,该参数指示在 COMMIT 之间要处理多少个逻辑工作单元。如果需要在轮类期间运行通常在下类时运行的批处理,我们可以减小此参数。

完成输入数据的处理后,在 APP_RESTART_DATA 表中删除您的进程的行。

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

关于java - 用于检索最后执行的 SQL 语句的 DB2 系统运行时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45135934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com