Почему 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