Существуют ли какие-либо специальные действия, необходимые для предотвращения повреждения данных при перезапуске сервера, на котором размещен экземпляр MS SQL Server?
Например, недавно я столкнулся с рекомендацией останавливать службу SQL вручную. Насколько я понимаю, это обрабатывается shutdown
процессом Windows .
Я уверен, что есть миллионы шагов, которые отдельные люди могут порекомендовать, как я только что упомянул, но я бы хотел избежать повторения устаревших или суеверных практик . Есть ли какие-либо рекомендации от Microsoft или широко распространенные отраслевые стандарты?
Этот вопрос относится к кратковременной процедуре перезагрузки машины. Есть еще один вопрос, касающийся долгосрочной процедуры обеспечения того, чтобы машина не использовалась, прежде чем окончательно ее отключить.
источник
Ответы:
Вам не нужно беспокоиться или бояться при перезапуске сервера sql.
Просто убедитесь, что у вас нет длительных транзакций. Лучше всего перезапустить сервер sql с помощью консоли или команды выключения в течение периода низкой / минимальной активности, также называемого окном обслуживания, чтобы минимизировать влияние на ваш бизнес.
Если у вас есть какая-либо настройка DR, и вы не хотите выходить из строя, тогда лучше всего перейти на другой ресурс, а затем перезапустить пассивный или вторичный узел.
Чистое завершение работы SQL Server происходит в следующих сценариях:
В большинстве случаев сервер sql аккуратно завершает работу всех своих баз данных, а затем завершает работу службы, которая включает в себя принятие или откат всех транзакций, запись всех грязных страниц на диск и запись в журнал транзакций.
Неправильное завершение работы сервера sql:
SQL Server всегда будет пытаться сделать чистое завершение работы ... если вы не сделаете что-то неправильное, как указано выше.
Некоторые действительно хорошие ссылки для чтения о том, что происходит за кулисами на этапе восстановления:
источник
Это все подробно описано на этой странице.
В связи с тем, что ваш вопрос конкретно задает вопрос: «Есть ли какие-либо рекомендации Microsoft », я склонен думать, что это нецелесообразно для такого обсуждения здесь. В статье их подробно описан процесс
Будут ли эти шаги удовлетворительными, будет моим мнением, а вы не хотите. Таким образом, правильный ответ всегда будет наиболее актуальным там.
Остановка службы до отключения
Нет, это не обязательно. Когда ядро Windows отправляет сигнал на завершение работы на SQL Server, он делает это безопасным способом, и система ожидает его завершения. Говоря в целом, все, что построено с возможностью безопасного выключения, не должно быть отключено вручную, и есть основания полагать, что все приложения Microsoft следуют своему собственному API и процедурам, привязанным к фазам
PRESHUTDOWN
илиSHUTDOWN
. Из документовPRESHUTDOWN
, которые я предполагаю, они используют,По мере необходимости, я предполагаю, что так работает SQL Server.
источник
Не совсем, когда дело доходит до выключения и предотвращения повреждения БД. MS SQL Server - очень зрелый продукт, и вероятность возникновения проблемы с повреждением при простом «отключении» была бы крайним сценарием. У вас гораздо больше шансов вызвать повреждение, если вы не запустите CHECK DB или не установите проверку контрольной суммы в вашей БД.
Возможно, наличие внешних инструментов, напрямую соприкасающихся с файлами MDF / NDF / LDF, может вызвать проблемы, такие как попытка «переместить» файлы между выключениями или попытка какого-либо программного обеспечения заблокировать файлы во время выключения. Я видел сбой кластеризации Windows, когда диск, на котором размещены файлы БД, переполнен, но не вызывает «повреждение БД».
Если вы хотите обеспечить плавное завершение работы или аварийное переключение, вы можете запустить контрольную точку, убедиться, что вы часто запускаете DBCC CHECKDB (по крайней мере, достаточно времени, чтобы иметь возможность восстановить поврежденные данные из резервной копии), и проверить, что любые внешние зависимости заботиться о таких, как зеркалирование.
Однако, если у каких-либо экспертов есть другие «лучшие практики», я бы с удовольствием их услышал, но, просматривая блоги и онлайн-ресурсы в течение последних нескольких лет, я мало что видел в повреждении данных и простом «выключении / перезапуске».
источник
Как я это делаю: 1) Отключить все вакансии. 2) Убедитесь, что в данный момент не выполняются никакие задания. 3) Запускайте SP_Who3 часто, чтобы проверить активность, также запустите sp_whoisactive для получения дополнительной информации. 4) Если нет активности, и единственное, что вы видите, это текущий запрос sp_who3 5) Переведите БД в автономный режим 6) Щелкните правой кнопкой мыши вверху базы данных и нажмите Стоп 7) Убедитесь, что сервисы находятся в остановленном состоянии в services.msc 8 ) Выполнено
PS. Если у вас есть PAGEIOLATCH / IOCOMPLETION или любое другое действие в SP_Who3, не делайте этого выше, так как это может привести ваши базы данных в режим восстановления.
источник