Этот миф (и его производные) очень распространены среди не-администраторов баз данных, поскольку многие проблемы в Windows можно исправить перезагрузкой компьютера (да, я до сих пор вижу это на серверах, Windows 10 и т.д. — попробуйте изменить номер порта служб терминалов без перезагрузки).
Миф: повреждение базы данных можно исправить перезапуском SQL Server, перезагрузкой сервера Windows или отсоединением/присоединением базы данных.
ЛОЖЬ
Ни одна из этих операций не заставит SQL Server исправить повреждение. Повреждённая страница должна быть восстановлена или каким-либо образом исправлена — ничего из этого не происходит ни при перезапуске SQL Server, Windows или физической машины, ни при отсоединении повреждённой базы данных.
Фактически, отсоединение, а затем попытка повторно присоединить повреждённую базу данных может быть одним из худших действий, которые вы можете предпринять, если повреждение таково, что база данных не может выполнить аварийное восстановление (crash recovery) (то есть она находится в состоянии SUSPECT или RECOVERY_PENDING) — поскольку частью процесса присоединения базы данных, которая нуждается в аварийном восстановлении, является… запуск аварийного восстановления, и если это не может быть сделано, присоединение завершается ошибкой. Именно тогда становится необходим трюк «взлома для возврата базы данных» (смотрите мою статью блога TechEd Demo: Creating, detaching, re-attaching, and fixing a suspect database). Никогда не отсоединяйте повреждённую базу данных.
Теперь — вот несколько интересных вариантов поведения, которые могут выглядеть так, будто перезагрузка исправляет повреждение:
- Если повреждение было лишь повреждённым образом страницы в памяти, но образ страницы на диске не повреждён, может показаться, что повреждение исправлено перезагрузкой.
- Если повреждение было реальным, но вы сделали что-то ещё в рамках перезагрузки, что привело к тому, что эта страница больше не распределена, может показаться, что повреждение исправлено перезагрузкой. Это то же самое, что и миф, который я развенчал некоторое время назад в статье блога Заблуждения относительно повреждений: могут ли они исчезать?
- Если подсистема ввода-вывода также перезагружается, и операция ввода-вывода по какой-то причине «зависла» в подсистеме ввода-вывода (например, устойчивая проблема чтения устаревших данных), то может показаться, что повреждение исправлено перезагрузкой. Это на самом деле не исправление повреждения, это позволяет сломанной подсистеме ввода-вывода восстановиться. Подсистема ввода-вывода всё ещё сломана. Я сталкивался с этим случаем, возможно, три или четыре раза в своей жизни.
Суть в следующем: для восстановления после повреждения вам нужна некоторая комбинация резервных копий и/или резервной системы для переключения на неё в случае сбоя. Перезагрузка — это не ответ и почти всегда будет просто пустой тратой времени.

Комментариев нет:
Отправить комментарий