Недавно на линию консультации пришел такой вопрос: Настроено обслуживание баз данных с помощью QMB. Почему файл резервной копии получается большего размера чем файлы базы данных?
Дело в том, что SQL Server умеет сохранять в одном файле произвольное количество резервных копий. Это определяется параметром NOINIT в T-SQL команде BACKUP. Если параметр указан, то при создании бэкапа в существующий файла новая резервная копия будет дописана в конец. Если нет, то файл будет повторно инициализирован. В задачах QMB все скрипты содержат параметр NOINIT.
Поэтому в QMB все зависит от того, какой шаблон задан в свойствах политики обслуживания для наименований резервных копий и создаваемых подпапок.
Так если шаблон имени файла содержит маркер %timestamp% (дата/время на момент исполнения задачи), то каждая резервная копия всегда будет записываться в свой файл. Потому что её имя всегда будет уникально. Если в наименование файла вместо %timestamp% использовать %date%, то резервные копии будут складываться в один файл в рамках одного дня.
При желании можно получить список всех резервных копий, хранящихся в определенном файле с помощью команды RESTORE HEADERONLY. Ниже приведен пример чтения содержимого файла backup_20160322_cmp.bak:
RESTORE HEADERONLY FROM DISK = N'F:\Backup\Srv01\backup_20160322_cmp.bak'
На рисунке ниже показан результат исполнения скрипта в SSMS:
Обратите внимание, на колонки:
DataBaseName - файл содержит резервные копии для разных баз данных.
BackupType – файл содержит разные типы резервных копий (полная, разностная, журнал транзакций).
Position – каждая резервная копия имеет уникальную позицию внутри файла.
Compressed - признак сжатой резервной копии (доступно с SQL 2008R2).
Внимание! В один файл нельзя записывать сжатые и несжатые резервные копии. Поэтому по умолчанию в шаблоне имени файла в QMB предлагается указывать маркер %cmp%, который будет добавлять префикс cmp если сжатие включено.
Рекомендуется записывать в один файл только одну резервную копию по следующим причинам: