Недавно я начал замечать периодические ошибки в файлах журналов своего веб-приложения. Возникая из разных мест приложения, ошибка всегда связана с неудачным подключением к БД, которая находится на другом сервере:
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 Автоматическое закрытие базы данных установлено на ВЫКЛ.
2 Я проверил журналы событий сервера APP и DB и не нашел ничего, связанного с sqlserver или сетевыми ошибками. Журнал событий, однако, содержит ошибки Schannel, но, по моему мнению, это не связано.
Было бы здорово, если бы в тот момент, когда на вашем веб-сайте возникла ошибка, вы могли бы попытаться подключиться к БД другим способом (возможно, SSMS). Если нет, можете ли вы подключиться к серверу, на котором находится БД? Если вы можете подключиться одновременно с веб-сайтом, используете ли вы одного и того же пользователя? Важно определить, не может ли веб-сайт подключиться к БД из-за проблемы с БД (остановился сам или слишком завис, чтобы ответить), сетевой ошибки при подключении к серверу БД или из-за ошибки аутентификации пользователя в рабочей БД. . Что делать, зависит от того, какая у вас проблема.
Что касается того, как это сделать, вы можете добавить некоторый веб-код, чтобы поймать ошибку и отправить вам электронное письмо. Тогда вы можете проверить БД именно в это время. Если это невозможно, возможно, вы можете написать небольшое приложение командной строки для подключения к БД и записать в файл отметку даты и времени вместе с любыми возникающими ошибками. Затем настройте запланированное задание на запуск программы каждые 5 минут или около того. Вы даже можете разместить это приложение командной строки на веб-сервере и другом сервере для получения дополнительной информации (вы также можете попробовать запустить приложение от имени других пользователей).
Например, если БД в порядке, сетевое соединение в порядке, и пользователь иногда не может подключиться, тогда, возможно, пользователь иногда блокируется из-за политики блокировки из-за слишком большого количества недопустимых попыток входа от кого-то / чего-то еще в сети. Или, возможно, БД вообще не отвечает в определенное время дня из-за запланированного резервного копирования, которое использует все доступные ресурсы на сервере БД. И т.п.