My Oracle Support Banner

PDQに30件を越えるレコードが存在すると、データベースカーソルがオープンされたままになります。その結果、ORA-01555のエラーが発生します。 (Doc ID 2284954.1)

Last updated on FEBRUARY 04, 2019

適用範囲:

Siebel CRM - バージョン 15.8 [IP2015] 以降
この文書の内容はすべてのプラットフォームに適用されます。

現象

期待される動作
=============================
PDQを実行した際、その処理が完了した時点でカーソルはクローズされるべきです。

 

実際に起きる想定外の動作
==========================================
PDQの実行後、そのビューに対するPDQのレコードが合計31件以上あると、対応するデータベースカーソルがオープンされたままになります。後ほど同じビューでPDQを実行すると、同じカーソルが使用されます。

Webクライアントのセッションが継続する限り、たとえ一回目と二回目(以降)のPDQの間で他のビューを表示していても、このカーソルはオープンしたままになります。最初のオープンから長時間を経過後に同じカーソルがフェッチに使用されるため、カーソルがOracle初期化パラメータのUNDO_RETENTIONで指定した時間を越えてオープンされたままである場合、"ORA-01555: snapshot too old"のエラーが発生する可能性があります。以下は単純化した例です。

1) UNDO_RETENTION パラメータに5400 (90分)を設定します。
2) 午前9時 Webクライアントで(31件以上のPDQレコードを持つ)取引先リストビューを表示します。
3) 午前9時 PDQの一つを実行します。
4) 他のビューに移動して必要な作業を行います。(または、Webクライアントのセッションが継続した状態で、取引先リストビューを表示したままにします。)
5) 午前11時 取引先リストビューを表示し、いずれかのPDQを実行します。

ステップ 3)でオープンしたカーソルはオープンされたままとなり、ステップ 5)で再度使用されます。そして3)と5)の間でほぼ7,200 秒(2時間)が経過し、UNDO_RETENTIONパラメータで指定した時間を越えています。他のデータベース関連の処理により、ステップ 5)でORA-01555のエラーが発生しえます。この時点でORA-01555にならなくても、後で同じWebクライアントのセッションが取引先リストビューでPDQを実行すれば、そこで発生する可能性があります。

SQL文とカーソルの動作を確認するためには、対象のコンポーネントに対して以下のイベントログレベルを指定してください。
ObjMgrSqlCursorLog=5
ObjMgrSqlLog=4

原因

To view full details, sign in with your My Oracle Support account.

Don't have a My Oracle Support account? Click to get started!


本書の内容
現象
原因
解決策
参照情報

My Oracle Support provides customers with access to over a million knowledge articles and a vibrant support community of peers and Oracle experts.