我们最近从 Sybase 迁移到 Oracle 11g 数据库。我们的应用程序使用 spring 3.0.3 和 IBATIS 2.3.4 与数据库交互。最近,我们开始面临 ORA-01000 Maximum open cursors exceeded 异常。我们与我们的 DBA 进行了交谈,他确认对于每一行插入,我们都占用了一个不正确的游标。游标大小为 300,由 DBA 设置。
您能否建议我们如何通过 ibatis 配置或 Java 代码来处理这个问题?我们从未遇到过 Sybase 的这个问题。
我们的 DAO 类中的当前代码结构:
try{
sqlMapClient.startTransaction();
sqlMapClient.startBatch();
for(...){
sqlMapClient.insert(<in table 1>);
sqlMapClient.insert(<in table 2>);
}
sqlMapClient.executeBatchDetailed();
sqlMapClient.commitTransaction();
}
catch(..){
}
finally{
sqlMapClient.endTransaction();
}
注意:我们不能执行中间提交,因为操作需要全部或无。