0

プログレスバージョン10c。

2つの異なるアプリサーバーがあり、一方をX、もう一方をYと呼び、それぞれが異なるDBインスタンスを指しているとします。

Xで実行されている.pプロセスがあり、X.dbでいくつかのレコードを使用(ロック)している場合、その途中で、Y.dbのレコードを操作するために、appserverYでプロセスを呼び出します...失敗した場合に正しい「動作」を取得しますか?

つまり

  • Yプロセスは失敗し、Xプロセスはそれを検出してロールバックできます(単独で、またはコード自体に強制することによって)。
  • Yプロセスを正常に呼び出した後、 Xプロセスは失敗し、Yは変更をロールバックします。
  • Yがコミットした後にXがコミットします:両方がそれぞれのデータを更新し、すべてのロックを解放しました

この作品であっても、注意すべき特定の注意点はありますか?パフォーマンスはどうですか?

4

1 に答える 1

0

2つのプロセス間にトランザクション状態の自動リンクはありません。アプリサーバーは単なる別のセッションであり、別のユーザーと同じです。2つのセッションの間には、たまたま通信チャネルがありますが、TRX状態の調整はありません。

シナリオ1では、アプリサーバーの呼び出しが失敗すると、エラーコードが返される可能性があります。親プロセスは、コードを介して何をしたいかを決定できます。ただし、すべてのTRX障害が呼び出し元に戻るわけではありません(「kill-9」と考えてください...)。また、アプリケーション駆動型のエラーロジックにはバグがある可能性があります。

シナリオ2では、YはXとは独立してコミットします。ロールバックは発生しません。

シナリオ3がシナリオ2と異なることはわかりません。これらのいずれかが非同期呼び出しである場合でも、それは問題ではなく、トランザクションは互いに区別されます。

于 2012-12-19T19:17:43.380 に答える