我们的Java程序必须从DB2表中删除大量记录,但它已用完了事务日志。
我们正在努力增加日志空间,但由于内部流程和其他因素......需要一周+才能完成。
我们正在寻找一种暂时删除一些记录而不是全部删除的方法。例如,当我们要删除1000条记录时,我们希望程序一次删除50条记录,然后执行提交并继续执行下一条50,直到删除所有1000条记录。如果删除X个记录后删除失败,则仍然可以。
我们正在使用Hibernate。
请求您就如何实现这一建议提出建议。即使在成功的sql执行场景中,我正在查看java中的sqlstate和sqlcode,但是我的不好,我找不到方法。
如此,循环执行... while(检查sqlcode表示完成不正确)
我们无法从后端删除,因为删除应该发生在来自java Web应用程序的用户请求上,此外,我们还有一些表约束和删除级联。
答案 0 :(得分:0)
我不知道Hibernate,但您可以将删除更改为:
delete from (
select * from schema.table where id=:id fetch first 50 rows only
)
假设executeUpdate()返回已删除的行数,您可以将其置于循环中(伪代码):
... stmt = session.createSQLquery("delete from ( ... fetch first 50 rows only )");
int n = 1
while (n > 0) {
transaction = session.beginTransaction();
n = stmt.executeUpdate();
transaction.commit();
}