【发布时间】:2014-09-19 14:18:24
【问题描述】:
我们的 Java 程序必须从 DB2 表中删除大量记录,但它的事务日志已用完。
我们正在努力增加日志空间,但由于内部流程和其他原因......这需要一周以上的时间才能完成。
我们正在寻找一种临时方法来一次删除几条记录,而不是全部删除。例如,当我们有 1000 条记录要删除时,我们希望程序一次删除 50 条记录,然后进行提交并继续执行下 50 条记录,直到删除所有 1000 条记录。如果删除X条记录后删除失败,仍然可以。
我们正在使用 Hibernate。
请求您就如何实现它提出建议。我正在考虑检查 java 中的 sqlstate 和 sqlcode,即使是在成功的 sql 执行情况下,但我不好,我找不到方法。
那么喜欢,循环做...while(检查sqlcode是否完成)
我们不能从后端删除,因为删除应该发生在来自 java Web 应用程序的用户请求上,此外,我们还有一些表约束和删除级联。
【问题讨论】:
-
为什么不是一次大批量删除而不是全部一次删除?
-
@M.Deinum,如前所述,我们用单次批量删除的事务日志空间不足。
-
从您的帖子中并没有那么明显的恕我直言,但唉。如果您知道要删除的 id,那么只需将它们分成可管理的块即可。您还声明您正在使用休眠,具体取决于您使用 JQL 删除记录或检索它们并删除它们或使用 SQL 将它们炸开?
-
@M.Deinum,感谢您关注并回答我的问题。这就是我们现在正在做的事情:`transaction = session.beginTransaction(); session.createSQLquery("从 id=:id 的 schema.table 中删除").setParameter("id", userinput).executeUpdate; transaction.commit();` 如果我的问题在我的帖子中不清楚,我们深表歉意。
标签: java sql spring hibernate db2