我们最近从Sybase迁移到Oracle 11g数据库。我们的应用程序使用spring 3.0.3和IBATIS 2.3.4与数据库进行交互。 最近,我们已经开始面临ORA-01000最大开放游标超出异常。 我们与DBA进行了交谈,他确认对于每一行插入,我们占用一个不正确的光标。 DBA设置的游标大小为300。
您能否建议我们如何通过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();
}
注意:我们无法执行中间提交,因为操作需要全部或不执行。
答案 0 :(得分:0)
您可以使用以下语句增加光标编号。只有DBA用户才能执行以下语句。如果您的pl / sql编码存在性能问题,则会出现此问题。请尝试调整procedure / sql。
ALTER SYSTEM SET open_cursors = 400 SCOPE=BOTH;