Какие шаги необходимы для безопасной перезагрузки компьютера с Microsoft SQL Server?

24

Существуют ли какие-либо специальные действия, необходимые для предотвращения повреждения данных при перезапуске сервера, на котором размещен экземпляр MS SQL Server?

Например, недавно я столкнулся с рекомендацией останавливать службу SQL вручную. Насколько я понимаю, это обрабатывается shutdownпроцессом Windows .

Я уверен, что есть миллионы шагов, которые отдельные люди могут порекомендовать, как я только что упомянул, но я бы хотел избежать повторения устаревших или суеверных практик . Есть ли какие-либо рекомендации от Microsoft или широко распространенные отраслевые стандарты?


Этот вопрос относится к кратковременной процедуре перезагрузки машины. Есть еще один вопрос, касающийся долгосрочной процедуры обеспечения того, чтобы машина не использовалась, прежде чем окончательно ее отключить.

Джон на все руки
источник
Я не могу иметь смысла спрашивать о «широко распространенных отраслевых стандартах» и не желать «тысяч шагов, которые отдельные люди могут порекомендовать». Это предположительно их учет отраслевых стандартов. Оба эти вопроса кажутся правильными, но официальным источником будет ссылка на статью Microsoft.
Эван Кэрролл

Ответы:

14

Вам не нужно беспокоиться или бояться при перезапуске сервера sql.

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

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

Чистое завершение работы SQL Server происходит в следующих сценариях:

  • Остановите сервер sql с помощью консоли служб.
  • Завершение работы вашего сервера
  • запуск команды SHUTDOWN в SSMS

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

Неправильное завершение работы сервера sql:

  • отключение с помощью Nowait
  • потянув кабель питания от вашего сервера (если у вас есть доступ).
  • убийство sqlserver.exe из диспетчера задач
  • Сбой Dirve, на котором находятся исполняемые файлы sql server, exe, системные базы данных или сбой системного диска Windows .. обычно диск C: \.
  • перегрев сервера, приводящий к его отключению (случается редко !!)

SQL Server всегда будет пытаться сделать чистое завершение работы ... если вы не сделаете что-то неправильное, как указано выше.

Некоторые действительно хорошие ссылки для чтения о том, что происходит за кулисами на этапе восстановления:

Кин Шах
источник
Отличная деталь, спасибо. Что вы подразумеваете под «DR Setup»?
Джон на все руки
@JonofAllTrades Аварийное восстановление ... например, доставка журналов, зеркальное отображение базы данных или вы даже можете думать о высокой доступности, такой как кластеризация
Кин Шах
1
Хотя я полностью согласен с этим списком «неправильных» сценариев выключения, повреждение данных не должно происходить даже тогда, благодаря записи в журнал.
Джон Алан
5

Это все подробно описано на этой странице.

В связи с тем, что ваш вопрос конкретно задает вопрос: «Есть ли какие-либо рекомендации Microsoft », я склонен думать, что это нецелесообразно для такого обсуждения здесь. В статье их подробно описан процесс

  • Используя либо
    • командная строка
    • Powershell,
    • SQL Server Management Studio (GUI)
  • За 2008, 2012, 2014, 2016.
  • Для любого
    • Database Engine
    • или, агент

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

Остановка службы до отключения

Это необходимо или рекомендуется сделать перед выключением сервера, на котором запущены службы SQL.

Нет, это не обязательно. Когда ядро ​​Windows отправляет сигнал на завершение работы на SQL Server, он делает это безопасным способом, и система ожидает его завершения. Говоря в целом, все, что построено с возможностью безопасного выключения, не должно быть отключено вручную, и есть основания полагать, что все приложения Microsoft следуют своему собственному API и процедурам, привязанным к фазам PRESHUTDOWNили SHUTDOWN. Из документов PRESHUTDOWN, которые я предполагаю, они используют,

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

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

По мере необходимости, я предполагаю, что так работает SQL Server.

Эван Кэрролл
источник
Это почти то, что я спрашивал. Этот документ описывает, как завершить работу ядра SQL Server, но не отвечает, нужно ли это или рекомендуется делать это перед тем, как завершить работу сервера, на котором работают службы SQL.
Джон на все руки
@JonofAllTrades обновлен снова.
Эван Кэрролл
3

Не совсем, когда дело доходит до выключения и предотвращения повреждения БД. MS SQL Server - очень зрелый продукт, и вероятность возникновения проблемы с повреждением при простом «отключении» была бы крайним сценарием. У вас гораздо больше шансов вызвать повреждение, если вы не запустите CHECK DB или не установите проверку контрольной суммы в вашей БД.

Возможно, наличие внешних инструментов, напрямую соприкасающихся с файлами MDF / NDF / LDF, может вызвать проблемы, такие как попытка «переместить» файлы между выключениями или попытка какого-либо программного обеспечения заблокировать файлы во время выключения. Я видел сбой кластеризации Windows, когда диск, на котором размещены файлы БД, переполнен, но не вызывает «повреждение БД».

Если вы хотите обеспечить плавное завершение работы или аварийное переключение, вы можете запустить контрольную точку, убедиться, что вы часто запускаете DBCC CHECKDB (по крайней мере, достаточно времени, чтобы иметь возможность восстановить поврежденные данные из резервной копии), и проверить, что любые внешние зависимости заботиться о таких, как зеркалирование.

Однако, если у каких-либо экспертов есть другие «лучшие практики», я бы с удовольствием их услышал, но, просматривая блоги и онлайн-ресурсы в течение последних нескольких лет, я мало что видел в повреждении данных и простом «выключении / перезапуске».

Али Разеги
источник
-1

Как я это делаю: 1) Отключить все вакансии. 2) Убедитесь, что в данный момент не выполняются никакие задания. 3) Запускайте SP_Who3 часто, чтобы проверить активность, также запустите sp_whoisactive для получения дополнительной информации. 4) Если нет активности, и единственное, что вы видите, это текущий запрос sp_who3 5) Переведите БД в автономный режим 6) Щелкните правой кнопкой мыши вверху базы данных и нажмите Стоп 7) Убедитесь, что сервисы находятся в остановленном состоянии в services.msc 8 ) Выполнено

PS. Если у вас есть PAGEIOLATCH / IOCOMPLETION или любое другое действие в SP_Who3, не делайте этого выше, так как это может привести ваши базы данных в режим восстановления.

Gozzy
источник
Очень редко возможно или стоит остановить весь трафик к базе данных для большинства людей. Я также отмечу, что выгода от перевода всех баз данных в автономный режим - это просто добавит больше времени к процессу.
LowlyDBA
Это не очень хороший совет. почему вы предлагаете отключить работу БД - если БД находятся в HADR, например, в зеркалировании или в AG, вы не сможете этого сделать.
Кин Шах