【问题标题】:Get un retrieved rows only in DB2 select仅在 DB2 选择中获取未检索到的行
【发布时间】:2014-05-23 22:18:21
【问题描述】:

我有一个 BPM 应用程序,我每隔 5 分钟使用调度程序 R1 轮询 DB2 数据库中的一些行,并带有以下查询 - - 从 STATUS = 'New' 的表中选择 *

根据返回的行,我进行一些处理,然后将这些行的状态更改为“读取”。

但是当这个处理完成时,它需要超过 5 分钟,同时调度器 R1 运行并拾取一些在上次运行中已经拾取的案例。

我如何确保每个调度程序都选择上次运行时未选择的行。我需要在我的选择语句中做哪些更改?请帮忙。

【问题讨论】:

  • 您使用的是哪种类型的服务器:DB2 for i、z/OS 或 LUW?知道为什么每 5 分钟运行一次的进程运行时间超过 5 分钟吗?
  • 我在 Windows 上使用 DB2,根据返回的行,我需要在 BPM 中完成一些处理,这可能需要任何时间才能完成,但我仍然必须确保下一次运行的计划不应该拾取先前调度程序已经拾取的行。

标签: db2


【解决方案1】:

如何确保每个调度程序都选择上次运行时未选择的行

您需要让每个调度器都知道其他调度器选择了什么。例如,您可以通过锁定选定的行 (SELECT ... FOR UPDATE) 来执行此操作。当然,您随后需要处理锁定超时。

另一个允许更好的并发性的选项是在处理记录之前更新记录状态。您可以引入中间状态,例如'In progress',并将状态包含在查询条件中。

【讨论】:

  • 第二个选项+1。将所有“新”更新为“RDY”或类似内容。查询要处理的“RDY”记录。完成后更新“RDY”记录。重复。
猜你喜欢
  • 2023-02-07
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
相关资源
最近更新 更多