【问题标题】:IBM DB2 batch update behavior on duplicate keyIBM DB2 对重复键的批量更新行为
【发布时间】:2012-11-14 03:56:15
【问题描述】:

我目前正在编写一个 Java 应用程序并在自动提交模式下使用批量插入。我的问题是,如果我在批处理中插入 4 行并抛出 BatchUpdateException,因为批处理的第二行触发了重复键违规! DBC 驱动程序是否继续处理剩下的 2 行离开数据库并插入 3 行?还是在第 2 行停止,留下 1 个插入行的数据库?还是回滚整个批次,留下 0 个插入行的数据库状态?

【问题讨论】:

  • 你为什么不试着去做呢?显然,在测试数据库上。通常,一批将被完全回滚(或者至少,我希望它是——我从未明确地使用过那个库);但是,打开autocommit,我怀疑语句可能正在执行WITH NC,这意味着可能会更新某些行。哪些行...取决于驱动程序中如何实现任何“排序”——如果它决定线程化,结果是未定义的。

标签: jdbc db2 spring-batch jdbctemplate


【解决方案1】:

它是这样工作的:

您有步骤中提到的块大小。例如,块大小为 10。

因此,每次将提交一批 10 个项目。

说,在一批 10 个项目中,第 4 个项目会像您的情况一样引发重复键异常。

在这种情况下,整个批次将被拒绝并且作业将停止(如果未实施跳过策略)。

但是,所有先前已提交的正确块都不会回滚。

进一步补充,如果在删除不正确的数据后,如果重新启动同一个作业,那么该作业将完全从它最后出错的块开始。

所以,已经写入的数据没有任何反应。

【讨论】:

  • 这是棘手的部分:“如果在删除不正确的数据后,如果重新启动相同的作业,那么作业将完全从它最后出错的块开始。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多