Почему SQL Server говорит "Запуск базы данных" в журнале событий два раза в секунду?
У меня есть база данных SQL Server [2012 Express с расширенными службами], в которой не так много. Я разрабатываю приложение, использующее EF Code First, и поскольку моя модель все еще находится в состоянии изменения, база данных становится сброшенной и повторно созданной несколько раз в день.
Сегодня утром мое приложение не смогло подключиться к базе данных при первом запуске. Что касается расследования, кажется, что база данных находится в режиме "Ожидание восстановления".
В журнале событий я вижу, что SQL Server зарегистрировался:
Запуск базы данных (моя база данных)
... грубо два раза в секунду всю ночь. (Журнал событий заполнен, поэтому я не могу видеть вчера вечером).
Эти "информационные" записи журнала останавливаются примерно в 6 утра этим утром, и за ними сразу же следует запись в журнале ошибок "error":
Недостаточно памяти в пуле ресурсов "internal" для запуска этого запроса
Что случилось с моей базой данных?
Примечание: возможно, что я оставил свое веб-приложение в режиме "отладки" в одночасье, хотя никто не "водит" его, я не могу себе представить, что будет много трафика базы данных, если таковые имеются.
Также стоит упомянуть, что у меня есть полнотекстовый каталог в базе данных (хотя, как я уже сказал, практически нет реального содержимого в БД в настоящее время).
Я должен сказать, что это беспокоит - я не был бы рад, если это произойдет с моей производственной базой данных!
Ответы
Ответ 1
С помощью AUTO_CLOSE ON база данных будет закрыта, как только нет никаких подключений к ней, и повторно откройте (запустите восстановление, хотя и быстро меняющееся) каждый раз, когда к нему будет установлено соединение. Таким образом, вы видели сообщение, потому что каждые 2 секунды ваше приложение будет подключаться к базе данных. Вы, вероятно, всегда имели такое поведение и никогда не замечали раньше. Теперь, когда ваша база данных разбилась, вы исследовали журнал и обнаружили эту проблему. Хотя хорошо, что теперь вы знаете и, скорее всего, исправите это, это не будет решать вам настоящую проблему, а именно доступность базы данных.
Итак, теперь у вас есть база данных, которая не выйдет из восстановления, что вы делаете? Вы восстанавливаете последнюю резервную копию и применяете план аварийного восстановления. На самом деле, все, что есть. И альтернативы нет.
Если вы хотите понять, почему произошел сбой (это может быть любая из примерно 1 бесчисленных причин...), вам нужно связаться с CSS (Поддержка продукта). У них есть средства, которые помогут вам провести исследование.
Ответ 2
Если вы хотите отключить это сообщение в журнале событий.
Просто перейдите в SQL Server Management Studio,
- Щелкните правой кнопкой мыши на своей базе данных
- Выберите "Параметры" (с левой панели)
- Посмотрите раздел "Автоматический" и измените "Автоматическое закрытие" на "Ложное"
- Нажмите "ОК"
Что все:)
Ответ 3
У меня была аналогичная проблема с sql-экспресс-базой данных, застрявшей в восстановлении. После изучения журнала выяснилось, что база данных запускается каждые две минуты. Запуск script
select name, state_desc, is_auto_close_on from sys.databases where name = 'mydb'
показало, что автоматическое закрытие включено.
Таким образом, кажется, что база данных всегда находится в восстановлении, но на самом деле выйдет в сети в течение короткой секунды, прежде чем снова переходить в автономный режим, потому что нет клиентских подключений.
Я решил это с помощью script.
Declare @state varchar(20)
while 1=1
begin
Select @state = state_desc from sys.databases where name='mydb';
If @state = 'ONLINE'
Begin
Alter database MyDb
Set AUTO_CLOSE_OFF;
Print 'Online'
break;
End
waitfor delay '00:00:02'
end