Почему я вижу сообщение "In Recovery" и как его предотвратить? - PullRequest
0 голосов
/ 04 июня 2010

Проект, над которым я работаю, создает локальную копию базы данных SQL Server для каждой ветви SVN, над которой вы работаете. Мы запускаем SQL Server 2008 Express с расширенными службами на нашем локальном компьютере для его размещения.

Когда мы создаем новую ветвь, сценарий сборки создаст новую базу данных с идентификатором этой ветви, создаст объекты схемы и скопирует выборку данных с рабочего теневого сервера.

После создания базы данных она или другие базы данных на локальном компьютере часто переходят в режим «В процессе восстановления» на несколько минут. После нескольких обновлений он появляется и счастлив, но иногда возвращается в режим «В восстановлении».

База данных создается в простом режиме восстановления. Имена файлов не указаны, поэтому для файлов используются пути по умолчанию.

Размер базы данных после загрузки данных составляет ~ 400 мегабайт. Он работает в режиме совместимости с SQL Server 2005.

Команда, которая создает базу данных:

sqlcmd -S $ (DBServer) -Q "ЕСЛИ НЕ СУЩЕСТВУЕТ (ВЫБЕРИТЕ [имя] ИЗ БД sysdatabase WHERE [name] = '$ (DBName)') НАЧАЛО СОЗДАТЬ БАЗУ ДАННЫХ [$ (DBName)]; print 'Created $ ( DBName) '; END "

... где $ (DBName) и $ (DBServer) являются параметрами MSBuild.

Сегодня утром я получил хороший чистый файл журнала. Когда я включаю свой компьютер, он запускает все пять баз данных. Тем не менее, две из них показывают транзакции, переносимые вперед и назад. Он просто пытается запустить все пять баз данных.

2010-06-10 08:24:59.74 spid52      Starting up database 'ASPState'.
2010-06-10 08:24:59.82 spid52      Starting up database 'CommunityLibrary'.
2010-06-10 08:25:03.97 spid52      Starting up database 'DLG-R8441'.
2010-06-10 08:25:05.07 spid52      2 transactions rolled forward in database 'DLG-R8441' (6). This is an informational message only. No user action is required.
2010-06-10 08:25:05.14 spid52      0 transactions rolled back in database 'DLG-R8441' (6). This is an informational message only. No user action is required.
2010-06-10 08:25:05.14 spid52      Recovery is writing a checkpoint in database 'DLG-R8441' (6). This is an informational message only. No user action is required.
2010-06-10 08:25:11.23 spid52      Starting up database 'DLG-R8979'.
2010-06-10 08:25:12.31 spid36s     Starting up database 'DLG-R8441'.
2010-06-10 08:25:13.17 spid52      2 transactions rolled forward in database 'DLG-R8979' (9). This is an informational message only. No user action is required.
2010-06-10 08:25:13.22 spid52      0 transactions rolled back in database 'DLG-R8979' (9). This is an informational message only. No user action is required.
2010-06-10 08:25:13.22 spid52      Recovery is writing a checkpoint in database 'DLG-R8979' (9). This is an informational message only. No user action is required.
2010-06-10 08:25:18.43 spid52      Starting up database 'Rls QA'.
2010-06-10 08:25:19.13 spid46s     Starting up database 'DLG-R8979'.
2010-06-10 08:25:23.29 spid36s     Starting up database 'DLG-R8441'.
2010-06-10 08:25:27.91 spid52      Starting up database 'ASPState'.
2010-06-10 08:25:29.80 spid41s     Starting up database 'DLG-R8979'.
2010-06-10 08:25:31.22 spid52      Starting up database 'Rls QA'.

В этом случае он продолжал пытаться запускать базы данных непрерывно, пока я не выключил SQL Server в 08: 48: 19.72, 23 минуты спустя. Между тем, я на самом деле могу использовать базы данных большую часть времени.

Последняя интересная строка в файле журнала - это ...

2010-06-10 08:35:01.52 spid34s     Recovery completed for database DLG-R8441 (database ID 6) in 1 second(s) (analysis 603 ms, redo 0 ms, undo 219 ms.) This is an informational message only. No user action is required.

1 Ответ

1 голос
/ 10 июня 2010

Похоже, что проблема заключалась в опции «Автоматическое закрытие». После того, как я выключил это, проблема ушла. Значение по умолчанию для этого включено, когда вы создаете базу данных в сценарии, но выключено, если вы создаете базу данных через Management Studio.

Функция автоматического закрытия освобождает все ресурсы для базы данных после отключения последнего пользователя. Поскольку это машина разработки, обычно есть только один пользователь, поэтому он освобождает все ресурсы после каждого запроса. Кроме того, создается впечатление, что Management Studio иногда подключается к каждой базе данных на сервере, в результате чего каждая база данных запускается несколько раз в минуту.

Приветствия

...