Прерывистый сбой соединения с БД
Недавно я начал видеть периодически возникающие ошибки в файлах журналов моего веб-приложения. При вызове приложения из разных мест ошибка всегда связана с неудачным подключением к БД, расположенной на другом сервере:
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
----
System.ComponentModel.Win32Exception (0x80004005): Access is denied
ИЛИ ЖЕ
The underlying provider failed on Open.
----
System.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) ---> System.ComponentModel.Win32Exception (0x80004005): Access is denied
....
at System.Data.Entity.Core.EntityClient.EntityConnection.Open()
ClientConnectionId:00000000-0000-0000-0000-000000000000
Я использую Microsoft SQL Server Standard Edition (64-разрядная версия) 10.50.4000.0 на Win Server 2008 R2
Я проверил:
1 База данных Autoclose установлена на OFF
2 Я проверил журналы событий APP и сервера БД и не нашел ничего, связанного с sqlserver или сетевыми ошибками. Журнал событий, однако, содержит ошибки Schannel, но, по-моему, он не связан.
1 ответ
Было бы здорово, если бы в тот момент, когда на вашем сайте произошла ошибка, вы могли попытаться подключиться к БД другим способом (возможно, SSMS). Если вы не можете, можете ли вы подключиться к серверу, на котором находится БД? Если вы можете подключиться в то же время, что и веб-сайт, не можете, используете ли вы того же пользователя? Важно определить, если веб-сайт не может подключиться к БД из-за проблемы с БД (остановился сам или слишком занят для ответа), из-за сетевой ошибки подключения к серверу БД или из-за ошибки аутентификации пользователя в рабочей БД, Какие действия нужно предпринять, зависит от того, какая у вас проблема.
Что касается того, как этого добиться, вы можете добавить некоторый веб-код, чтобы поймать ошибку и отправить вам электронное письмо. Тогда вы можете проверить БД именно в это время. Если это невозможно, возможно, вы можете написать небольшое приложение командной строки для подключения к БД и записать отметку даты и времени в файл вместе с любыми возникающими ошибками. Затем настройте запланированное задание для запуска программы каждые 5 минут или около того. Вы даже можете разместить это приложение командной строки на веб-сервере и другом сервере, чтобы получить дополнительную информацию (вы также можете попробовать запустить приложение от имени разных пользователей).
Например, если с базой данных все в порядке, с сетевым подключением все в порядке, а пользователь иногда не может подключиться, то, возможно, пользователь иногда блокируется из-за политики блокировки из-за слишком большого количества недопустимых попыток входа в систему от кого-то / чего-то еще в сети. Или, возможно, БД вообще не отвечает в определенное время дня из-за запланированного резервного копирования, использующего все доступные ресурсы на сервере БД. И т.п.