1

最近、Sybase から Oracle 11g データベースに移行しました。私たちのアプリケーションは、Spring 3.0.3 と IBATIS 2.3.4 を使用してデータベースとやり取りします。最近、ORA-01000 Maximum open cursors exceeded 例外に直面し始めました。DBA と話をしたところ、行を挿入するたびに 1 つのカーソルを占有していることがわかりましたが、これは正しくありません。カーソル サイズは、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();

}

注: 操作は all or none である必要があるため、中間コミットは実行できません。

4

1 に答える 1

0

次のステートメントを使用して、カーソル数を増やすことができます。次の文を実行できるのはDBAユーザーのみです。この問題は、pl/sql コーディングにパフォーマンスの問題がある場合に発生します。プロシージャ/SQLのチューニングを試みてください。

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