Які кроки необхідні для безпечного перезавантаження машини, на якій розміщено Microsoft SQL Server?


24

Чи потрібні якісь спеціальні кроки для запобігання пошкодження даних під час перезавантаження сервера, на якому розміщено екземпляр MS SQL Server?

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

Я впевнений, що є мільйон кроків, які можуть рекомендувати окремі люди, як, що я щойно згадав, але я хотів би уникати повторень застарілих чи забобонних практик . Чи є якісь рекомендації від Microsoft чи широко поширені галузеві стандарти?


Це питання стосується короткострокової процедури перезавантаження машини. Є ще одне питання щодо тривалої процедури забезпечення того, що машина не використовується, перед тим як зняти її постійно.


Я не можу мати сенсу просити "широко розповсюджені галузеві стандарти" і не бажати "мільйонів кроків, які можуть рекомендувати окремі люди". Мабуть, це врахування галузевих стандартів. Обидва ці питання здаються вагомими питаннями, але авторитетним джерелом буде посилання на статтю Microsoft.
Еван Керролл

Відповіді:


14

Вам не потрібно бути фантазійним / хвилюватися чи лякатися, коли ви перезапускаєте сервер sql.

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

Якщо у вас є будь-які установки DR, і ви не хочете бути вниз, то найкраще - відмовитись, а потім перезапустити пасивний або вторинний вузол.

Очищення відключення SQL Server відбувається в наступних сценаріях:

  • Зупиніть сервер sql за допомогою консолі Services.
  • Вимкнення сервера
  • запуск команди SHUTDOWN в SSMS

У першу чергу ситуація, сервер sql чисто вимикає всі свої бази даних, а потім припиняє послугу, яка передбачає запуск або скасування всіх транзакцій, записування всіх брудних сторінок на диск, а потім запис запису в журнал транзакцій.

Неправильне відключення сервера sql:

  • відключення з nowait
  • підтягуючи кабель живлення від вашого сервера (якщо у вас є доступ).
  • вбивство sqlserver.exe від менеджера завдань
  • Невідповідність несправності, на якій розміщуються бінарні файли сервера sql, exe, системні бази даних або несправність системного диска Windows .. Зазвичай C: \ диск.
  • перегрівання сервера, що призводить до його відключення (це рідко має відбуватися !!)

SQL Server завжди намагатиметься зробити чисте відключення ... якщо ви не зробите щось неналежне, як зазначено вище.

Деякі по-справжньому хороші посилання для читання про те, що відбувається за кадром під час фази відновлення:


Чудова деталь, дякую. Що ви маєте на увазі під "інсталяцією DR"?
Йон усіх торгів

@JonofAllTrades Disaster Recovery .. наприклад доставку журналів, дзеркальне відображення баз даних або ви навіть можете подумати про високу доступність, наприклад, кластеризація
Кін Шах,

1
Хоча я цілком погоджуюся з цим переліком сценаріїв «неправильного» відключення, пошкодження даних не повинно траплятися навіть тоді, завдяки запису вперед.
Джон Алан

5

Це все вичерпно викладено на цій сторінці.

Оскільки ваше запитання конкретно задає питання "чи рекомендовано Microsoft ", я схильний думати, що це обговорення тут є непродуктивним. У статті їх детально описаний процес

  • Використовуючи будь-який
    • командний рядок
    • Powershell,
    • Студія управління SQL Server (GUI)
  • За 2008, 2012, 2014, 2016 роки.
  • Для будь-якого
    • База даних двигуна
    • або, агент

Задовільним чи є ці кроки, я вважаю, що ви не хочете. Тож правильна відповідь завжди буде найсвіжішою.

Припинення послуги до вимкнення живлення

чи потрібно це чи рекомендується це робити перед тим, як вимкнути сервер, на якому працює служба 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 Clustering накручується, коли файли БД, що розміщують диск, заповнені, але спеціально не спричиняють пошкодження db.

Якщо ви хочете допомогти забезпечити плавне відключення чи відмову, ви можете запустити контрольну точку, переконайтеся, що ви часто використовуєте DBCC CHECKDB (принаймні достатньо разів, щоб можна було відновити пошкоджені дані з резервної копії) та перевірити, чи існують зовнішні залежності. подбав про такі, як дзеркальне відображення.

Якщо у будь-яких експертів є інші "найкращі практики", я б хотів їх почути, але, переглядаючи блоги та інтернет-ресурси протягом останніх декількох років, я не бачив у корупції даних та простому "відключенні / перезапуску".


-1

Як я це роблю: 1) Вимкнути всі завдання. 2) Переконайтеся, що в даний час не виконується жодна робота. 3) Запускайте SP_Who3 часто, щоб перевірити активність, а також запустіть sp_whoisactive для отримання додаткової інформації. 4) Якщо немає жодної активності, і ви бачите єдиний запит sp_who3 5) Відключення БД в автономному режимі 6) Клацніть правою кнопкою миші вгорі бази даних та натисніть Зупинити 7) Перевірте, чи служби перебувають у зупиненому стані в Services.msc 8 ) Готово

PS. Якщо у вас є PAGEIOLATCH / IOCOMPLETION або будь-яка інша діяльність у SP_Who3, не робіть зазначеного вище, оскільки це може перевести ваші бази даних у режим відновлення.


Дуже рідко це можливо або варто зупинити весь трафік до бази даних для більшості людей. Я також зауважу, впевнена, яка користь від передачі всіх баз даних в автономному режимі - це просто додасть більше часу процесу.
LowlyDBA

Це зовсім не хороша порада. чому б ви запропонували зняти dbs в автономному режимі - якщо dbs знаходиться в HADR, наприклад, дзеркальному відображенні або AG, ви не зможете це зробити.
Кін Шах
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.