3

アプリケーションのアーキテクチャは簡単です。アカウント所有者データを保持する Web アプリケーションがあります。このデータは処理され、ビジネス ルールの数に基づいてアカウント所有者のステータスが更新されます。このプロセスは、ページ上のボタンを使用して開始され、実行時間の長いプロセスです (たとえば 15 分)。このデータ処理を実行するために、ストアド プロシージャを内部的に呼び出すコンポーネントが開発されています。ビジネス ルールのほとんどは、ストアド プロシージャに保持されます。

タイムアウトを処理するために、処理は非同期的に行われます (スレッド プール、カスタム スレッド、または非同期コールバック デリゲートを使用)。プロセス全体がトランザクションの下で実行されます。アプリケーション プールがリサイクルされた場合、またはワーカー プロセスが強制的に終了された場合にトランザクションがどうなるかについて、あなたの見解を知りたいですか?

4

2 に答える 2

10

SQL Server、MySQL、Oracle などの SQL データベースを使用していると仮定します。

これらのデータベース プラットフォームには、独自の内部トランザクション モデルがあります。それらと通信してトランザクションを開始すると、サーバーがトランザクションを管理します。

トランザクションをコミットするには、クライアントから変更をコミットするようにデータベースに指示する必要があります。トランザクションがこの命令を受信しない場合、トランザクションは「保留」状態のままになります。最終的に、トランザクションがそれ以上の指示なしに「保留中」になった後、サーバーはトランザクションが「停止」したと見なして放棄し、トランザクションのロールバックを実行します。

保留中のトランザクションが (分離レベルに応じて) データベース内のリソース (行、ページ、テーブル全体) を使用できなくする可能性があるため、これはトランザクション処理の最悪のシナリオです。通常、これは、ネットワーク接続がトランザクションの途中で失敗し (停電など)、クライアントが「接続を閉じる」コマンドをサーバーに送信しない場合に表示されます。


トランザクション中にデータベースに対して作業を行っている最中に、アプリケーション プールがリサイクルされてアプリケーションが終了した場合、データベースへの接続は閉じられます。接続を閉じるこの動作により、サーバーは接続に関連付けられている保留中のトランザクションを破棄する必要があります。

正確な動作は、特定のデータベースと構成によって異なります。

どちらの場合でも、データベースのデータはそのまま残ります。

于 2010-04-20T10:47:40.667 に答える
0

ワーカー プロセスが終了した場合、アプリケーションはロールバックすると思います。

しかし、あなたはテストしなければなりません。

于 2010-04-19T22:20:05.860 に答える