DatabaseManager.fetchでOracle10gにSQLを発行した際に、結果が取得できない事象について教えてください。

 
【回答】
以下に示す条件で、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
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています
Powered by Zendesk