Является ли свойство SQL Server IsShutdown полезным для определения того, находится ли база данных в хорошем состоянии? - PullRequest
2 голосов
/ 18 января 2011

В моей компании есть инструмент, который отслеживает статусы на серверах, сервисах, базах данных и т. Д. Мы отслеживаем ряд локальных серверов для наших клиентов. Одна конкретная простая проверка - определить, находится ли база данных SQL Server в «хорошем» состоянии, путем запроса значения определенных свойств базы данных. Мы отслеживаем четыре свойства базы данных:

  • IsSuspect
  • IsOffline
  • IsEmergencyMode
  • IsShutdown

Это запрос, который мы используем:

SELECT name AS [SuspectDB],
  DATABASEPROPERTY(name, N'IsSuspect') AS [Suspect],
  DATABASEPROPERTY(name, N'IsOffline') AS [Offline],
  ISNULL(DATABASEPROPERTY(name, N'IsShutdown'), 1) AS [Shutdown],
  DATABASEPROPERTY(name, N'IsEmergencyMode') AS [Emergency]
FROM sysdatabases
WHERE (DATABASEPROPERTY(name, N'IsSuspect') = 1)
   OR (DATABASEPROPERTY(name, N'IsOffline') = 1)
   OR (ISNULL(DATABASEPROPERTY(name, N'IsShutdown'), 1) = 1)
   OR (DATABASEPROPERTY(name, N'IsEmergencyMode') = 1)

При тестировании обновления до SQL Server 2008 кажется, что довольно много наших баз данных возвращают 1 (истинное) значение для свойства IsShutdown . Раньше такого не было в SQL Server 2005. Документация MSDN для свойства просто гласит: «При запуске базы данных возникла проблема».

Насколько я могу судить, базы данных в порядке. Они работают, могут быть запрошены и т. Д. Никаких проблем.

Действительно ли свойство IsShutdown действительно имеет значение для моих целей мониторинга, т. Е. Указывает ли это, что база данных находится в плохом состоянии? Или я должен просто удалить его из моего запроса?

ПРИМЕЧАНИЕ. В разговоре с одним из наших постоянных администраторов баз данных они обнаружили, что в некоторых наших новых базах данных SQL Server 2008 тот факт, что свойство IsAutoClose включено, может иметь какое-то отношение к причине эти базы данных имеют IsShutdown истины. Отключение IsAutoClose , по-видимому, "исправляет" истинное значение IsShutdown .

Ответы [ 4 ]

1 голос
/ 19 января 2011

Хорошо, после долгих исследований этого я пришел к выводу:

Краткая история: Свойство IsShutdown не важно для мониторинга состояния моих баз данных. Даже если установлено значение True, база данных все еще находится в хорошем состоянии.

Длинная история: Определение MSDN для свойства IsShutdown является неправильным. Читается:

  • При запуске базы данных возникла проблема

Это определение не имеет особого смысла, учитывая название объекта. На практике свойство IsShutdown напрямую связано со свойством IsAutoClose. Если автоматическое закрытие полностью завершило работу базы данных после того, как больше нет активных соединений, IsShutdown устанавливается в True. Как только база данных снова начинает вращаться (так сказать), IsShutdown возвращается в False.

Эта теория подкреплена тем фактом, что в sys.databases есть столбец is_cleanly_shutdown . Значение этого столбца всегда совпадает со значением IsShutdown, то есть они одинаковы.

Плохое определение свойства, вероятно, привело к тому, что разработчик, от которого я унаследовал этот запрос, включил его в свою проверку состояния базы данных. Теперь я удалил проверку этого свойства из запроса.

0 голосов
/ 19 января 2011

Я бы сказал, что ONLINE и MULTI_USER - это единственное хорошее состояние, в котором вы хотите, чтобы ваша база данных находилась.

select state_desc,user_access_desc from sys.databases
0 голосов
/ 19 января 2011

Читали ли вы сноску, которая связана специально для NULL для этого свойства, на странице MSDN, на которую вы ссылались?

Возвращаемое значение также равно NULL, если база данных никогда не запускалась или была автоматически закрыта.

И так, да, если вы измените свойство AutoClose, вы получите другие результаты. Объединение значения NULL в 1 для этого свойства кажется плохим решением - я удалил бы ваши ISNULL() и проигнорировал бы значения NULL.

0 голосов
/ 19 января 2011

IsShutDown, который устанавливается, если SQL Server не может открыть файлы базы данных во время запуска

Так что было бы неплохо знать, перезагрузили ли вы свой сервер, и кто-то переехалфайлы базы данных или они не открылись из-за проблемы с дисковым вводом-выводом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...