2

ユーザー入力を取得して処理し、SQL テーブルにレコードを追加する Web サイトがあります。

今週末、問題が発生しました。SQL サーバーの動作が不安定で、処理時間が非常に長くなり、最後にタイムアウト レスポンスが返されました。その上、処理されたデータが失われました。

最終的に、この処理されたデータを SQL が再び機能するまでどこかに保存しておき、レコードを追加することができるかどうかを知りたいですか?

これは Web サービスで実現できると思いますか? それとも、asp.net のコード ビハインドで実行できますか?

4

1 に答える 1

1

しばらく前に、着信ファックスを処理してデータベースに保存するファックス サーバーがあったときに、このシナリオに対処しましたが、データベースは信頼性に欠けていました。

この場合、SQL Server にアクセスできない場合は、データをディスク上のキューにシリアル化し、SQL Server がオフラインであることを示すフラグをアプリケーションに設定します。このフラグが設定されている場合、後続の送信はすべてディスク キューに格納されます。

次に、SQL Server がバックアップされているかどうかを定期的に確認し、バックアップされている場合は、キュー内の各ファイルを処理してから、オフライン フラグをオフにしました。

ASP.Net では、SQL Server がオフラインになると、SQL Server を監視するスレッドを開始し、オンラインに戻ったときにこの処理を実行できます。

ただし、あなたが説明した場合、誰かがトランザクションを開始して終了していないか、メンテナンス操作 (DBCC、バックアップ) が行われていたようです。

これが定期的に発生する場合は、予想される通常の期間よりもわずかに長い (たとえば 2 倍の) CommandTimeout を設定する必要があり、その時間内に操作が完了しない場合は、ユーザーに問題があることを伝えるか、キャッシングモードに。

于 2013-01-07T16:42:07.203 に答える