2015 год. Компания «Купи пакет». Молодой сисадмин Петя решает сэкономить на лицензии для бэкапов. На форуме пишут:
«База данных — это просто файл. Переведи в offline, скопируй .mdf — и порядок».
Петя в среду вечером переводит SQL Server в OFFLINE, копирует заветный файл на внешний диск и спокойно уходит в отпуск.
Через месяц основной диск сервера выходит из строя. Петя достаёт внешний диск, пытается присоединить скопированный .mdf… и получает:
«Ошибка 3456: Невозможно выполнить откат транзакций. База данных помечена как подозрительная».
В логах SQL Server за тот вечер сохранилась запись:
«LSN chain broken. Ghost transaction found».
А ночной охранник позже припомнил, что слышал короткий необычный скрежет из серверной — но камеры ничего не зафиксировали.
Что погубило данные?
- Месть антивируса
Во время копирования штатный антивирус начал проверку внешнего диска. Часть страниц .mdf показалась ему вредоносной, и он изолировал их в карантин. Разрыв цепочки LSN и ошибка 3456 — результат физической пропажи блоков данных.
- Зависть предшественника
Бывший сисадмин оставил в планировщике задание-бомбу. Если кто-то переведёт базу в OFFLINE без корректного sp_detach_db, скрипт модифицирует заголовок .mdf и дописывает в лог пугающую строку. Царапина на корпусе сервера — его «автограф».
- Плата за жадность
База работала на урезанной редакции SQL Server. В ней есть скрытый механизм контроля: при попытке копирования .mdf в обход BACKUP сервер намеренно искажает контрольную сумму и оставляет «Ghost transaction» как метку. Никакой мистики — только ограничения лицензии.
- Проклятие спешки
Петя не дождался отката активных транзакций и не выполнил sp_detach_db. Файл скопировался с разорванной цепочкой LSN. Журнал транзакций остался на старом диске, а зависшая операция так и не попала в .mdf. Ошибка 3456 — классическое следствие несогласованного состояния.
- Петя сделал вообще все неверно
Герою следовало выполнить штатную процедуру Back Up, упаковывать базу в формат .bak (включая журналы транзакций) причём в обычном режиме без выключения сервиса.
Принять участие в конкурсе и выиграть мерч можно в нашем телеграм канале.
Подарим подарки 3-м участникам, выбравшим правильный вариант ответа. ✨
Разгадка — в пятницу.