しばらく前に、着信ファックスを処理してデータベースに保存するファックス サーバーがあったときに、このシナリオに対処しましたが、データベースは信頼性に欠けていました。
この場合、SQL Server にアクセスできない場合は、データをディスク上のキューにシリアル化し、SQL Server がオフラインであることを示すフラグをアプリケーションに設定します。このフラグが設定されている場合、後続の送信はすべてディスク キューに格納されます。
次に、SQL Server がバックアップされているかどうかを定期的に確認し、バックアップされている場合は、キュー内の各ファイルを処理してから、オフライン フラグをオフにしました。
ASP.Net では、SQL Server がオフラインになると、SQL Server を監視するスレッドを開始し、オンラインに戻ったときにこの処理を実行できます。
ただし、あなたが説明した場合、誰かがトランザクションを開始して終了していないか、メンテナンス操作 (DBCC、バックアップ) が行われていたようです。
これが定期的に発生する場合は、予想される通常の期間よりもわずかに長い (たとえば 2 倍の) CommandTimeout を設定する必要があり、その時間内に操作が完了しない場合は、ユーザーに問題があることを伝えるか、キャッシングモードに。