私のオーケストレーションには送受信ポートがあり、送信シェイプが見つかるまで、操作されるすべてのメッセージはまったく同じです。つまり、送受信ポートを介してOracleデータベースに送信するメッセージは同じです。
基本的に、最新の変更を希望するテーブルとテーブルの所有者を示すリクエストをデータベースに送信しています。前述したように、機能した更新と機能しなかった更新を比較すると、この時点まで、両方の要求メッセージは同じです。
問題: データベースからの応答は空である可能性があり、空であってはなりません。変更されたテーブルからの完全な行を期待していますが、何も受信しない場合があります。
詳細: これらのテストをトリガーする最も単純なフィールドのみを変更し、常に同じフィールドを変更しています。つまり、99 から 98 から 97 から 98 にデクリメントまたはインクリメントする整数フィールドなどです。最初は 1 つの数値が機能する可能性がありますが、 2番目ではないか、時にはその逆です。
他のフィールドでは、このエラーが発生する可能性があります。
詳細... : Oracle の機能に問題があるようです。つまり、タイムスタンプを処理する方法により、Oracle が空のレコードを返す可能性があります。これは、Biztalk が既に変更を通知されていると想定しているためです。データベースの内部を調べていると、最後の変更の試行がすべて正確に同じ秒にタイムスタンプされていることがわかりました (物理的に不可能です)。
また、Oracleにメッセージを送信しているときに、エラーを引き起こしているように見えることを2回行うようです(ちなみに、問題のテーブルにはトリガーがありません)。私のオーケストレーションでは、メッセージを送信する直前にイベントログに書き込みますが、そのメッセージは一度だけ書き込まれます...
Oracleの問題のようです。現在、一貫して機能するフィールドが機能せず、他のフィールドが機能する場合があります-以前は抽選の運が良かったと思います.
なぜ私はこれが起こっていると思うのですか: 私は、(データベースが私に言った) 変更されたクライアントを私に与えるように頼みます. それが機能するとき、Biztalk にメッセージを返すのは最初の取得であり、したがって、実際の情報を持っています。そうでない場合は、2 番目の検索で最新の変更が要求され、最初の検索で既に変更が取得されているため、空のレコードが返されるためです。