使用 Java API 实现的导入的事务日志已满错误

通过使用 Java™ API 实现的导入来处理大型数据集时,如果未间歇地落实数据,那么可能会性能较差,最终导致 "事务日志已满" 错误 (例如, DB2®上的 SQL0964C )。

症状

在大导入的早期阶段,entry.save() 操作执行快速,但随着时间的推移而显着减少。 由于 SQL0964C 错误 (Db2) 和调度程序服务 exception.log 文件显示如下条目,最终保存操作可能失败:
[<code>]2013-01-24 12:08:32,809 [sch_worker_0] ERROR com.ibm.ccd.common.error.AustinException JOB_ID:5613- CWPCM0002E:Generic error / Exception: CWPCO0015E:Update failed, the operation has been rolled back: , Exception:DB2 SQL Error: SQLCODE=-964, SQLSTATE=57011, SQLERRMC=null, DRIVER=3.64.82
com.ibm.db2.jcc.am.SqlException: DB2 SQL Error: SQLCODE=-964, SQLSTATE=57011, SQLERRMC=null, DRIVER=3.64.82
        at com.ibm.db2.jcc.am.bd.a(bd.java:682)
...
        at com.ibm.db2.jcc.am.jo.executeUpdate(jo.java:750)
...
        at com.ibm.ccd.api.catalog.item.ItemImpl.save(ItemImpl.java:698)
...
        at com.ibm.ccd.api.extensionpoints.ImportFunctionArgumentsImpl.run(ImportFunctionArgumentsImpl.java:79)[</code>]

原因

如果未实现其他事务处理,那么将在一个事务中处理一个导入所处理的所有项,这会导致导入性能不佳,并且在数据库服务器端运行事务日志空间不足。 这可能仅在处理大型数据集时发生。

诊断问题

将日志记录语句添加到导入扩展点代码,以监视数据处理的进度,并检查 exception.log 文件中是否存在错误。

解决问题

在导入扩展点代码中实现事务处理,并定期落实数据。 有关更多信息,请参阅:
  1. 导入和报告作业中事务和异常处理的样本代码
  2. Java API 的事务和异常处理准则:常见导入方案