[Seasar-user:14709] Re: [DBflute]外だしSQLのカーソル検索でフェッチエラー

kubo [E-MAIL ADDRESS DELETED]
2008年 6月 16日 (月) 12:23:15 JST


久保です。

mackeyさん、こんにちは

>>ORA-01002 です.
> →現在PRO-Cで動いているプログラムがあり、
> こちらはできているのでJAVAでも同じことが
> できると思っていました。

なるほど、そういうことだったのですね。
申し訳ありませんが、自分PRO-Cの経験がないので、
そこはなんともいえません。。。

> 対策としましては以下の2点のどちらかですかね?
> 1.FOR UPDATEを外して実行する。

FOR UPDATEを外してもダメかと思われます。
要は、カーソル検索のトランザクションとInsertの
トランザクションが同じになっているのが良くないので。

> 2.カーソル中にコミットを外す。(ロールバックセグメント大きくする?)

で、論理的には確かに行けますが物理的な別の問題が出てきそうなので
どちらかというと

1. カーソル検索だけトランザクションから外す
もしくは
2. 小林さんがおっしゃられたように、明示的に
 カーソル検索とInsertを別トランザクションにする
 (REQUIRES_NEWを使う)

というところかと思います。

2008/6/16  <[E-MAIL ADDRESS DELETED]>:
> お世話になります。
> mackeyです。
>
> 久保様、小林 (koichik)様お返事ありがとうございます。
>
>>すいません、そもそもそういったトランザクションの使い方は
>>許されているものでしょうか?(自分の知識不足かもしれません...)
>>試したことがないのですが、その再度開始したトランザクションと
>>カーソル検索のResultSetは関連付くのかどうかが気になりました。
>>カーソル検索のResultSetは最初のトランザクションのコミットで
>>終わっているようにも思えます。
>>
>>カーソル検索自体をトランザクションから外すことは
>>要件的にできないのでしょうか?
> →やりたいこととして60万件のデータを1行ずつ読込、
> いろいろな処理を実行してコミット件数(1万件)まで来たらコミット
> 再度読み込みをしてまたコミット件数(1万件)まで来たらコミット
> と最後まで読み込み、コミットを実行したいのです。
>
>>許されません.
>>トランザクションをコミットした時点でカーソルは
>>無効で,無理矢理フェッチしようとした結果が
>>ORA-01002 です.
> →現在PRO-Cで動いているプログラムがあり、
> こちらはできているのでJAVAでも同じことが
> できると思っていました。
>
> 対策としましては以下の2点のどちらかですかね?
> 1.FOR UPDATEを外して実行する。
> 2.カーソル中にコミットを外す。(ロールバックセグメント大きくする?)
>
> SEASAR2の質問ではなかったようですが
> 宜しくお願いします。
>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


Seasar-user メーリングリストの案内