Многие думают:
«Если база данных — это файл, значит, можно просто скопировать .mdf и сохранить как резервную копию».
На практике такой подход чреват потерей данных, повреждением БД и невозможностью восстановления.
Давайте разберём, почему.
Проблема: согласованность данных (консистентность)
Файл .mdf - это основной файл данных в Microsoft SQL Server, но он не является полной копией базы данных в стабильном состоянии.
Если вы скопируете его, пока SQL Server активно работает, велика вероятность, что:
- часть транзакций уже записана в память, но ещё не попала на диск;
- какие-то операции находятся в промежуточном состоянии;
- данные могут быть несогласованными - например, изменена только одна сторона связи «родитель-потомок».
Такая копия может не открыться при восстановлении, или, что хуже, откроется, но с повреждёнными или противоречивыми данными.
Консистентность (согласованность данных) - это состояние, при котором все данные в базе соответствуют правилам целостности, и любая транзакция либо полностью выполнена, либо полностью отменена. Простое копирование файла не гарантирует этого.
Для надёжного бэкапа нужна консистентная копия - то есть такая, при которой SQL Server сам «замораживает» операции на мгновение, завершает все активные записи и только потом разрешает создание резервной копии.
Транзакционные логи: сердце надёжности SQL Server
В SQL Server все изменения сначала записываются в журнал транзакций, а потом уже применяются к данным.
Это обеспечивает выполнение принципов АСИД (ACID):
- Атомарность - транзакция либо проходит полностью, либо не проходит вовсе;
- Согласованность - база переходит из одного корректного состояния в другое;
- Изоляция - параллельные транзакции не мешают друг другу;
- Долговечность - после фиксации изменения не теряются.
Если вы скопируете только .mdf, вы потеряете весь журнал транзакций.
Point-in-Time Recovery (восстановление на определённый момент времени)
Одно из главных преимуществ правильного бэкапа - возможность восстановить базу на нужный момент, например, за 5 минут до ошибки, когда пользователь удалил важные данные.
Для этого в SQL Server используется цепочка резервных копий:
- Полный бэкап — базовая точка восстановления.
- Инкрементные бэкапы (опционально) — изменения с момента последнего полного бэкапа.
- Бэкапы журнала транзакций — все изменения с момента последнего бэкапа журнала.
Простое копирование .mdf делает такую операцию невозможной — нет журнала, нет контроля над временем.
Правильный способ резервного копирования в SQL Server:
- Использовать встроенные средства SQL Server;
- Также можно использовать VSS (Volume Shadow Copy Service) - для «холодного» копирования при выключенном SQL Server;
- Решения от специализированных производителей систем резервного копирования - они интегрируются с VSS и SQL Server для создания согласованных бэкапов без остановки сервиса.
Копирование .mdf - это не резервное копирование, это авария в ожидании.
Настоящий бэкап в SQL Server — это:
- согласованная копия, созданная через SQL Server;
- с сохранением журнала транзакций;
- с возможностью восстановления на нужный момент времени.
Используйте правильные инструменты - и ваша база будет в безопасности даже при ошибках, сбоях или атаках.