1

我们最近从 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();

}

注意:我们不能执行中间提交,因为操作需要全部或无。

4

1 回答 1

0

您可以使用以下语句增加游标数。只有 DBA 用户可以执行以下语句。每当您的 pl/sql 编码出现性能问题时,就会出现此问题。请尝试调整程序/sql。

ALTER SYSTEM SET open_cursors = 400 SCOPE=BOTH;
于 2013-09-15T23:56:43.170 回答