Вы правы: это связано с тем, сколько времени требуется базам для восстановления после сбоя.
Временная шкала отработки отказа синхронного зеркалирования выглядит примерно так:
- Основной сервер A завершает работу и закрывает все соединения. С этого момента любой клиент, который попытается подключиться к серверу А, принудительно закроет свое соединение.
- Первичный сервер A обеспечивает полную синхронизацию журналов со вторичным сервером B.
- Запускается служба SQL сервера B.
- Служба SQL сервера B начинает принимать соединения, и в этот момент клиенты могут снова подключиться.
Независимо от того, насколько быстры ваши серверы, будет короткий (по крайней мере, секунда) период, когда соединения будут бомбить. Как сказал Стивен Лоу, вам нужно перехватить это исключение, подождать и повторить попытку. Имейте в виду, что будет сложнее, если ваше приложение выдает несколько запросов подряд как часть более крупной транзакции - ваша транзакция может завершиться неудачей.