Настройка MS SQL Server бэкапирования (Full/Differential/Log)

Потеря данных в SQL Server чаще всего происходит не из-за сбоев оборудования, а из-за отсутствия проверенной стратегии резервного копирования. Мы настраиваем полные, дифференциальные и бэкапы журнала транзакций, чтобы ваш бизнес был защищён от непредвиденных ситуаций. Наша команда реализует проект под ключ — от аудита текущей системы до настройки и последующей поддержки, обеспечивая надёжное восстановление данных в любой момент.
Часто задаваемые вопросы

Настройка MS SQL Server бэкапирования (Full/Differential/Log)

Самая частая причина потери данных в SQL Server — не hardware failure и не ransomware. Это отсутствие проверенной стратегии бэкапов: бэкапы делались, но никто не проверял восстановление, и в нужный момент оказалось, что последний рабочий бэкап — трёхнедельной давности. Или что бэкап transaction log не работал, потому что базы были в модели восстановления SIMPLE, и все log backups тихо падали с This command is not supported with simple recovery model. Мы сталкивались с такими ситуациями десятки раз — поэтому построили процесс, исключающий подобные сюрпризы. Наш опыт в SQL Server — более 5 лет, более 50 проектов по настройке и восстановлению.

Три типа бэкапов и когда что нужно

Тип бэкапа Частота Размер Время восстановления RPO
Full Еженедельно Самый большой Долгое (часы) До недели
Differential Ежедневно Средний (растёт до full) Среднее До суток
Transaction Log Каждые 15-30 мин Маленький Быстрое (минуты) 15-30 мин

Full backup — снимает всю базу целиком. Может идти часами на больших базах. Является базой для differential и log бэкапов.

Differential backup — только страницы, изменённые с момента последнего полного бэкапа. Растёт со временем: если после full прошла неделя, differential может быть почти таким же по размеру. Ускоряет восстановление по сравнению с применением всей цепочки log-бэкапов.

Transaction Log backup — архивирует записи transaction log с момента последнего log backup. Обязательное условие — модель восстановления FULL или BULK_LOGGED. Позволяет восстановить базу до конкретной точки во времени (point-in-time recovery).

Типичная стратегия для продакшн OLTP базы:

  • Full backup: раз в неделю (воскресенье ночью)
  • Differential backup: раз в сутки (будни в 02:00)
  • Log backup: каждые 15–30 минут

При такой стратегии максимальная потеря данных при аварии — 15–30 минут.

Почему важен бэкап журнала транзакций?

Без log backup восстановление возможно только на момент последнего полного или дифференциального бэкапа. Это означает потерю данных за несколько часов или дней. С log backup можно откатиться до любой секунды внутри интервала. Особенно критично для финансовых и ERP-систем, где каждая транзакция на счету. Если база в SIMPLE recovery model, log backup невозможен — нужно переключить модель на FULL. Это требует downtime, но в итоге окупается.

Настройка через SQL Server Agent Jobs (T-SQL)

Maintenance Plans из GUI хрупкие и плохо управляются из git. Правильный путь — T-SQL скрипты в Agent Jobs.

-- Пример job для полного бэкапа с компрессией
DECLARE @BackupPath NVARCHAR(500) = 'D:\SQLBackup\Full\AppDB_' + CONVERT(NVARCHAR(20), GETDATE(), 112) + '_' + REPLACE(CONVERT(NVARCHAR(8), GETDATE(), 108), ':', '') + '.bak';
BACKUP DATABASE [AppDB] TO DISK = @BackupPath WITH COMPRESSION, CHECKSUM, STATS = 10, DESCRIPTION = 'Weekly Full Backup';
-- Проверка целостности после бэкапа
RESTORE VERIFYONLY FROM DISK = @BackupPath WITH CHECKSUM;
-- Transaction Log backup
DECLARE @LogPath NVARCHAR(500) = 'D:\SQLBackup\Log\AppDB_log_' + CONVERT(NVARCHAR(20), GETDATE(), 112) + '_' + REPLACE(CONVERT(NVARCHAR(8), GETDATE(), 108), ':', '') + '.trn';
BACKUP LOG [AppDB] TO DISK = @LogPath WITH COMPRESSION, CHECKSUM, STATS = 5;

Опция CHECKSUM добавляет контрольную сумму к бэкапу — если страница повреждена, это обнаружится при бэкапе, а не при восстановлении в кризисный момент.

Ola Hallengren Maintenance Solution

Для большинства проектов разумнее использовать готовое решение Ola Hallengren (бесплатно, де-факто стандарт в сообществе) вместо написания своих скриптов. Это более чем в 5 раз сокращает время на поддержку — не нужно отлаживать свои велосипеды. Поддерживает Always On, автоматически пропускает log backup для SIMPLE-баз.

-- Пример вызова для полного бэкапа всех пользовательских баз
EXECUTE dbo.DatabaseBackup
    @Databases = 'USER_DATABASES',
    @Directory = 'D:\SQLBackup',
    @BackupType = 'FULL',
    @Compress = 'Y',
    @CheckSum = 'Y',
    @Verify = 'Y',
    @CleanupTime = 168, -- удалять файлы старше 168 часов (7 дней)
    @LogToTable = 'Y';

-- Log backup с очисткой старых файлов
EXECUTE dbo.DatabaseBackup
    @Databases = 'USER_DATABASES',
    @Directory = 'D:\SQLBackup',
    @BackupType = 'LOG',
    @Compress = 'Y',
    @CheckSum = 'Y',
    @CleanupTime = 48,
    @LogToTable = 'Y';

Решение автоматически пропускает log backup для баз в SIMPLE режиме, обрабатывает Always On AG (делает бэкап на предпочтительной реплике) и пишет историю в таблицу для мониторинга.

Как часто нужно тестировать восстановление?

Бэкап без проверки восстановления — не бэкап. Минимум раз в квартал нужно фактически восстанавливать базу из бэкапа на тестовый сервер. Мы включаем план тестового восстановления в каждый проект и обучаем вашу команду проводить его самостоятельно. Это единственный способ быть уверенным, что в критической ситуации данные будут доступны.

-- Восстановление с точкой во времени
RESTORE DATABASE [AppDB_Test] FROM DISK = 'D:\SQLBackup\Full\AppDB_YYYYMMDD_HHMMSS.bak'
WITH NORECOVERY, REPLACE,
MOVE 'AppDB' TO 'E:\TestData\AppDB_Test.mdf',
MOVE 'AppDB_log' TO 'E:\TestData\AppDB_Test_log.ldf';

-- Применяем differential
RESTORE DATABASE [AppDB_Test] FROM DISK = 'D:\SQLBackup\Diff\AppDB_diff_YYYYMMDD_HHMMSS.bak'
WITH NORECOVERY;

-- Применяем log бэкапы до нужной точки
RESTORE LOG [AppDB_Test] FROM DISK = 'D:\SQLBackup\Log\AppDB_log_YYYYMMDD_HHMMSS.trn'
WITH NORECOVERY;

RESTORE LOG [AppDB_Test] FROM DISK = 'D:\SQLBackup\Log\AppDB_log_YYYYMMDD_HHMMSS.trn'
WITH RECOVERY, STOPAT = 'YYYY-MM-DD HH:MM:SS'; -- точная точка восстановления

Хранение и репликация бэкапов

Локальные бэкапы — только первая линия. Для защиты от потери сервера нужна внешняя копия:

  • SQL Server Backup to URL (Azure Blob Storage) — встроенная функция с SQL Server 2012
  • Robocopy/rsync на отдельный файловый сервер или NAS
  • Сторонние решения: Veeam Backup & Replication, Commvault, Veritas

Правило 3-2-1: три копии, два разных носителя, одна вне площадки.

Что входит в настройку резервного копирования?

Мы предлагаем комплексную услугу под ключ:

  • Аудит текущей инфраструктуры и модели восстановления
  • Разработка стратегии backup с учётом RPO/RTO
  • Создание и настройка SQL Agent Jobs (T-SQL) или внедрение Ola Hallengren
  • Настройка алертов (email, Telegram) на сбои бэкапов
  • Настройка репликации бэкапов во внешнее хранилище
  • Документирование процедуры восстановления
  • Обучение вашей команды (2 часа live demo)
  • Гарантия на корректную работу бэкапов в течение 1 месяца после настройки

Мы на рынке более 5 лет, реализовали 50+ проектов по SQL Server. Свяжитесь с нами, чтобы получить консультацию и оценку вашего проекта за 1 рабочий день.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139