Я знаю, что это старая тема, но:
https://support.microsoft.com/en-us/kb/273673
объясняет, почему в соединении должен быть указан тайм-аут. Выписка ниже.
Если администратор кластера отказал серверу SQL Server, пакеты сброса TCP не отправляются. Если процесс SQL Server завершается операционной системой (программой Kill.exe), отправляются пакеты сброса.
Это может повлиять на клиентское приложение, если приложение не указывает параметр тайм-аута запроса или время ожидания запроса равно нулю (0).
Если приложение не имеет значения тайм-аута запроса, то после сбоя открытые соединения останутся в состоянии ESTABLISHED. Тот факт, что открытые соединения не закрыты и никакие дополнительные TCP-пакеты не отправляются с этих соединений, указывает на то, что эти соединения полностью свободны. Поскольку аварийное переключение не отправляло какие-либо пакеты сброса TCP клиентскому приложению, эти открытые соединения ожидают результатов запроса бесконечно (при условии бесконечного времени ожидания запроса) и потенциально могут перестать отвечать на запросы соединения (зависание).