У меня есть сервер SQL 2008, который преимущественно используется в качестве сервера разработки, за последние две недели у него были случайные "припадки", я изолировал причину этих припадков, поскольку CHECKDB работает почти непрерывно, следующая информация журнала регистрируется в журнал событий Windows (Источник: MSSQLSERVER, Категория: Сервер):
Event: 1073758961, Message: Starting up database 'DBName1'. Event: 1073758961, Message: Starting up database 'DBName2'. Event: 1073759397, Message: CHECKDB for database 'DBName1' finished without errors on 2010-07-19 20:29:26.993 (local time). This is an informational message only; no user action is required. Event: 1073759397, Message: CHECKDB for database 'DBName1' finished without errors on 2010-07-19 20:29:26.993 (local time). This is an informational message only; no user action is required.
Это повторяется каждые 1-2 секунды, пока SQL Server не будет перезапущен или неисправные базы данных не будут отсоединены.
Сначала я подумал, что это проблема с базами данных, поэтому я сделал резервную копию и восстановил их в экземпляре SQL Express, все данные в порядке, и CHECKDB работает без проблем.
Две базы данных, которые вызывали проблемы на прошлой неделе, не использовались; поэтому я сделал их полные резервные копии и отсоединил базы данных, это решило проблему. Однако в 01:00 по Гринвичу сегодня утром другие совершенно не связанные базы данных начали показывать те же проблемы.
В журнале событий нет ничего, что могло бы предположить, что с сервером что-то случилось, например, перезагрузка, нет сообщений о сбоях процессов или обнаруженных проблемах с контроллером хранилища.
В разговоре с владельцем компании этот компьютер в прошлом страдал от «гремлинов», однако совет был принят, и материнская плата была заменена, а компьютер восстановлен, память и процессор остались прежними.
Статистика:
Редактировать: кто-то опубликовал, а затем удалил комментарий об AutoClose, он был включен для затронутых баз данных. Похоже, что лучше всего отключить его, поэтому я сделал это следующим образом.
EXECUTE sp_MSforeachdb
'IF (''?'' NOT IN (''master'', ''tempdb'', ''msdb'', ''model''))
EXECUTE (''ALTER DATABASE [?] SET AUTO_CLOSE OFF WITH NO_WAIT'')'
Я не знаю, повторится ли проблема в течение некоторого времени, поэтому я все еще открыт для дальнейших ответов.
Проверьте AutoClose собственность наших баз данных. Выключи это
Если задано значение ON, база данных полностью закрывается и ее ресурсы освобождаются после выхода последнего пользователя. База данных автоматически открывается, когда пользователь снова пытается использовать базу данных.
Если установлено значение OFF, база данных остается открытой после выхода последнего пользователя.
ALTER DATABASE DBName1 SET AUTO_CLOSE OFF;
По умолчанию для баз данных, созданных на экземплярах Express, параметр AUTO_CLOSE включен;
Это нормальный процесс для любой базы данных SQL после перезапуска сервера ....
SQL Server проверяет последние транзакции, примененные в базе данных (MDF), с последними зарегистрированными в журнале транзакций (LDF). При необходимости он может применять транзакции из журнала в БД.