【回答】
以下に示す条件で、Oracle10gにてDatabaseManager.fetchを使用してSQLを発行した場合結果が取得できない場合があります。
大変お手数ですが、事象を確認した場合は【事象を確認した条件】を参照して、調査及び対応のご判断をお願いいたします。
【事象を確認した条件】
・データベース:Oracle10g(10.2.0.1)
・patch04を適用し、DatabaseManager#fetchが高速化されている場合
・DatabaseManager#fetchを使用して特定(*1)のSQLを発行している場合
*1 DatabaseManager#fetchの【高速フェッチ】を利用すると
発行したSQL上下にページング用のSQLを挟み込みます。
挟み込んだSQLが以下の条件を満たす場合、事象が発生する可能性があります。
・WHERE句の抽出条件にSELECT句がある。「WHERE bbb = (SELECT ...」
・ORDER BY句がある。
・JOIN句がある。
※この条件で必ず発生するわけではありません。
【原因】
弊社にてOracle10g(10.2.0.4)で掲題の不具合が発生しないことを確認しています。
したがって、Oracle10g(10.2.0.1)のSQL解釈の不具合と考えられます。
【対応方法】
対応方法は2つございます。お客様のご利用状況等を考慮し、何れの対応方法をとるかのご判断をお願いします。
■対応方法1
・オプション機能モジュールで追加された【高速フェッチ】オプションを無効化する。
・設定方法
imart.xmlの以下のタグ内に<fast-fetch>タグを追加し、<fast-fetch>タグ内にtrue/falseを設定する
intra-mart/platform/service/application/database
なお、設定を省略した場合のデフォルトはfalseとなります。
・無効化した場合の問題点
・大量データに対するフェッチの場合、JDBC内でメモリーリークが発生し、OutOfMemoryが発生する場合がある。
(Oracle, PostgreSQL)
・データベースのLOB系のカラム情報が取得できない。
(DB2)
・大量データに対するフェッチが遅い
(全DB)
※ ServerManager, ServicePlatformを停止してから設定作業を行ってください。
■対応方法2
・Oracle10gを10.2.0.4以降にバージョンアップする。
-- 対象 ------------------------------------------------------------------------
iWP/Webシステム構築基盤/WebPlatform/AppFramework
--------------------------------------------------------------------------------
FAQID:242