Стратегия резервного копирования MSSQL: Full, Diff, Log для 1С и баз данных
Некорректно спланированная политика бэкапов в высоконагруженных системах (включая 1С:Предприятие) приводит к следующим проблемам:
- Огромный размер файлов
.ldfиз-за отсутствия регулярного бэкапа журнала транзакций в модели восстановления Full; - Длительный простой бизнеса при авариях (RTO превышает допустимые окна) из-за необходимости накатывать сотни мелких логов транзакций;
- Риск потери данных (RPO > 15 минут) при аппаратном сбое основного накопителя;
- Конфликты расписания, вызывающие I/O-задержки и блокировки пользователей в рабочее время.
1. Архитектура надежной цепочки резервного копирования
Классический отраслевой стандарт для высоконагруженных баз MSSQL (RPO ≤ 10-15 минут, сбалансированный RTO):
- Full Backup (Полный): Ежедневно в нерабочие часы (например, 01:00) или раз в неделю с глубоким архивом;
- Differential Backup (Разностный): Каждые 4-6 часов в течение рабочего дня;
- Transaction Log Backup (Журнал транзакций): Каждые 10-15 минут круглосуточно.
2. Настройка модели восстановления базы данных
Для обеспечения непрерывной цепочки логов переведите базу в модель FULL:
USE [master];
GO
ALTER DATABASE [ERP_1C] SET RECOVERY FULL WITH NO_WAIT;
GO3. Скрипты резервного копирования с контролем целостности
Полная резервная копия:
BACKUP DATABASE [ERP_1C]
TO DISK = N'E:\Backup\MSSQL\ERP_1C_Full.bak'
WITH FORMAT, INIT, COMPRESSION, CHECKSUM, STATS = 10;Разностная резервная копия:
BACKUP DATABASE [ERP_1C]
TO DISK = N'E:\Backup\MSSQL\ERP_1C_Diff.bak'
WITH DIFFERENTIAL, INIT, COMPRESSION, CHECKSUM, STATS = 10;Резервная копия журнала транзакций:
BACKUP LOG [ERP_1C]
TO DISK = N'E:\Backup\MSSQL\Log\ERP_1C_Log.trn'
WITH NOINIT, COMPRESSION, CHECKSUM, STATS = 10;4. Правильный порядок восстановления цепочки
-- 1. Восстановление последнего Full с параметром NORECOVERY
RESTORE DATABASE [ERP_1C] FROM DISK = N'E:\Backup\MSSQL\ERP_1C_Full.bak'
WITH NORECOVERY, REPLACE;
-- 2. Восстановление последнего актуального Diff
RESTORE DATABASE [ERP_1C] FROM DISK = N'E:\Backup\MSSQL\ERP_1C_Diff.bak'
WITH NORECOVERY;
-- 3. Последовательный накат всех последующих Transaction Log файлов
RESTORE LOG [ERP_1C] FROM DISK = N'E:\Backup\MSSQL\Log\ERP_1C_Log_01.trn' WITH NORECOVERY;
RESTORE LOG [ERP_1C] FROM DISK = N'E:\Backup\MSSQL\Log\ERP_1C_Log_02.trn' WITH RECOVERY;
GO Частые вопросы (FAQ)
Что произойдет, если вручную сделать Full Backup сторонней утилитой без параметра COPY_ONLY?
Стандартный Full Backup сбрасывает LSN дифференциальной базы (Differential Base LSN). Все последующие плановые разностные резервные копии (Diff) станут невалидными для восстановления из основной цепочки. Для разовых выгрузок всегда используйте опцию WITH COPY_ONLY.
Почему после очистки (Shrink) разностный бэкап становится огромным?
Разностный бэкап копирует все экстенты, изменившиеся с момента последнего Full бэкапа (по битовой карте DCM). Команда DBCC SHRINKFILE перемещает страницы данных в начало файла, помечая тысячи экстентов как измененные, что раздувает Diff бэкап почти до размера полного.
Как часто нужно делать проверку целостности (DBCC CHECKDB) по отношению к бэкапам?
Рекомендуется выполнять DBCC CHECKDB перед созданием полного бэкапа. Опция WITH CHECKSUM в команде BACKUP вычисляет контрольные суммы страниц, но не заменяет логическую проверку структурных связей индексов.
Очищает ли разностный бэкап журнал транзакций?
Нет, разностный бэкап не усекает журнал транзакций. Очистка неактивной части VLF (Virtual Log Files) происходит исключительно при успешном выполнении BACKUP LOG в модели восстановления Full.