このトピックでは、メッセージ・フローを実行する際に生じる可能性のある共通問題のいくつかに対処するためのアドバイスを示します。
このエラーによって、メッセージは Failure ターミナルに送信されます。
BIP2211: (ターゲット属性 [ターゲット属性名] 、オブジェクト [オブジェクト名] について無効である属性値 [属性値] を含む無効構成メッセージです。有効な値は [有効な値] です。)
MQInput ノードの Failure ターミナルを Out ターミナルではなく、 連続するノードに接続した可能性があります。 Out ターミナルは、3 つのターミナルのうちの真ん中の ターミナルです。 未接続の Out ターミナルに送信されたメッセージは廃棄されます。
MQInput ノードの Failure ターミナルが、 例えば MQOutput ノードと接続している場合には、 これらのメッセージは現れません。
あるノードと他のノードの Failure ターミナルとの接続は、すべてのエラー処理を扱えるようにメッセージ・フローを設計したことを示します。 Failure ターミナルと MQOutput ノードを接続した場合、メッセージ・フローは発生するエラーを無視します。
このアクションは、メッセージが送信されるノードからのみ、 ユーザー・トレース・エントリーを生成します。
分散システムでは、mqsireadlog コマンドを使用して トレース・エントリーを検索したり、mqsiformatlog コマンドを使用してそれらをフォーマットしたりすることができます。 また、フォーマットされたレコードを表示して、メッセージ・フローによってメッセージのパスをチェックすることができます。
z/OS の場合、COMPONENTPDS にある
BIPRELG
ジョブを編集してから実行依頼し、mqsireadlog および mqsiformatlog コマンドを実行して、
トレースを処理してください。
メッセージをメッセージ・フローに再送してください。Debug-level レベルのトレースによって、メッセージがその経路を取る理由についてさらに詳細な情報を入手できます。また、これによって、メッセージ・フローが実行するアクションの理由を判別することができます。
問題を解決した後、トレースを必ずオフにしてください。 そうしないと、パフォーマンスに悪影響が出ます。
SQL0954C Not enough storage is available in the application heap to process the statement.
z/OS では、HY014 の SQLSTATE は SQL コード -99999 で戻される可能性があります。
これは、DataFlowEngine プロセスが、
準備済み SQL ステートメントが処理する DB2 z/OS 処理限界の 254 ハンドルに達したことを表します。
パフォーマンス上の理由で、ステートメントが準備された後、 ステートメントおよびハンドルはキャッシュ内に保管され、 SQLPrepare 関数への呼び出し回数を削減します。 ステートメントがすでにキャッシュ内にある場合、ステートメント・ハンドルが戻され、 新規の結合パラメーターで再実行できるようにされます。
ステートメント・ストリングを使用して、キャッシュ検索を実行します。 各メッセージごとに多少異なる、ハードコーディングされた SQL ストリングを使用すると、 ステートメントはキャッシュ内に見つからず、SQLPrepare 関数は常に実行されます (また、 新規の ODBC カーソルがオープンされます)。 PASSTHRU ステートメントを使用する場合、パラメーターを実行時に結合したまま、 同じ準備済み SQL ステートメントを処理するメッセージごとに使用できるように、 パラメーター・マーカーを使用してください。 この方法は、データベース・リソースに関してより効率的であり、 繰り返し実行されるステートメントの場合は、より高速になります。
しかし、パラメーター・マーカーを常に使用できるわけではありません。 また、実行時に SQLステートメント・ストリングを動的に作成したいと思うかもしれません。 これによって、多数の固有 SQL ステートメントがキャッシュされる可能性があります。 これらのステートメントは一般的に大きくないため、キャッシュ自体はそれほど大きくなりません。 しかし、少ないメモリー割り振りが多数あると、メモリーのフラグメント化が生じる可能性があります。
問題が解決しない場合は、wsplugin6.conf を空にして ブローカーを再始動し、メッセージ・フローを再デプロイしてください。
db2set DB2_RR_TO_RS=YES_OVERRIDE_RI
DB2 データベース・マネージャーを再始動して、 この変更を有効にします。