• 文字サイズ変更
  • S
  • M
  • L

FAQのNo.から検索


  • No : 35904
  • 公開日時 : 2024/05/20 07:32
  • 印刷
DSServistaDSCloud

【DataSpider】「ORA-01000: 最大オープン・カーソル数を超えました。」が発生します。原因と対応策を教えてください

繰り返し処理の中で [検索系SQL実行] 処理を使用していたところ、「ORA-01000: 最大オープン・カーソル数を超えました。」が発生しました。
 
原因と対応策を教えてください。
カテゴリー : 

回答

■過去事例
 過去事例では、以下の場合に本事象が発生することを確認しています。
 
  ・PSP の入力を消費しない処理を実行している
  ・コネクションプールを使用している
 
■仕様説明
 ▼PSP の入力を消費しない処理について
  スクリプト変数への値の代入では PSP の入力を消費しません。 
  このため、例えば以下のような処理で、ドキュメントMapper ではスクリプト変数への値の代入のみを行っている場合、PSP の入力が消費されないため、カーソルを保持したまま待機します。
  
   検索系SQL実行 = ドキュメントMapper
   ※「=」はPSP有効のデータフロー
 
 ▼コンポーネントプールについて
  コンポーネントプールを利用していない場合、コネクションがクローズするタイミングでカーソルが解放されます。
  しかし、コンポーネントプールを利用している場合、コネクションがクローズされずにプールに戻されるため、  カーソルが解放されずに蓄積する可能性があります。
 
■原因
 「■仕様説明」に記載したどちらか、もしくは双方の仕様により、カーソルが解放されない状態で繰り返し処理を行った結果、Oracle 側のオープンカーソル数の上限を超えてしまったことが原因と考えられます。
 
■回避策
 1.PSP の入力を消費しない処理の修正
  「■仕様説明」に記載したドキュメントMapper 内でスクリプト変数への値の代入のみを行っている場合は、  変数Mapper に変更し、PSPを使用しない処理とすることでご対応ください。
  
  変数Mapper は出力先がなく、変数に値をセットする場合に適した処理を行うため、入力→変数に代入する場合はドキュメントMapper よりも変数Mapper の方がパフォーマンスに優れます。
 
 2.コンポーネントプールの使用しないに設定する
  コンポーネントプールを使用する設定にしている場合は、コンポーネントプールの使用しないに設定することでご対応ください。
 
 3.オープンカーソル数の上限を拡張
  Oracle 側のオープンカーソル数の上限を拡張し、[検索系SQL実行] 処理を実行する回数分、オープンカーソル数を確保することでご対応ください。
目的別で検索
トラブルシューティング

このFAQに関してのご意見をお聞かせ下さい。