Почему размер файла .bak увеличивается / удваивается с каждым последующим резервным копированием на SQL Server?

10

Я использую простую БД на SQL Server 2012 Express.

Только сегодня, когда я делаю резервную копию базы данных, .bakразмер файла удваивается по сравнению с тем, что был из предыдущей резервной копии всего за несколько минут до этого. Сегодня я сделал несколько резервных копий (через SQL Server Management Studio -> тип резервной копии: полная), и с каждой копией .bakфайл удваивается.

В SQL Server Mgmt Studio, когда я щелкаю правой кнопкой мыши по моей БД -> «Отчеты» -> «События резервного копирования и восстановления» -> раскрываю «Успешные операции резервного копирования»:

Здесь отчет показывает, что последний размер резервной копии был записан как 55 МБ, но когда я перехожу к фактическому .bakфайлу, он составляет 260 МБ. Каждое другое резервное копирование сегодня было записано также размером 55 МБ, а соответствующие им .bakфайлы в несколько раз больше (и растут с каждой операцией резервного копирования).

Что может быть не так? Я не вносил никаких изменений в базу данных с тех пор, как это произошло.

full_prog_full
источник

Ответы:

14

Файл резервной копии содержит несколько копий базы данных, поскольку он не «инициализируется» и не «форматируется» с каждой резервной копией.

Перейдите на вкладку «Параметры» в диалоговом окне «Резервное копирование базы данных» и выберите «Перезаписать все существующие наборы резервных копий»:

введите описание изображения здесь

Макс Вернон
источник
8

Я предполагаю, что вы каждый раз копируете один и тот же файл. Существует возможность INITили NOINITпри запуске резервного копирования. NOINIT(который используется по умолчанию) говорит ему просто добавить дополнительную резервную копию в файл.

За BOL:

{NOINIT | В ЭТОМ }

Управляет добавлением или перезаписью операции резервного копирования к существующим наборам резервных копий на носителе резервного копирования. По умолчанию добавляется последний набор резервных копий на носителе (NOINIT).

Таким образом, каждый раз, когда вы запускаете резервную копию 55 МБ, файл увеличивается на 55 МБ.

Если вы включите INITпредложение в команду резервного копирования, то оно будет каждый раз перезаписывать существующую резервную копию.

Другой вариант, конечно, состоит в том, чтобы каждый раз запускать резервные копии в новые файлы и очищать старые файлы. Это часто хорошая идея, если одна из текущих резервных копий плохая, или вам нужно вернуться в историю.

Кеннет Фишер
источник
2

Если вы делаете это прямо в SQL, а не с помощью мастера управления сервером sql server. Вы должны указать «NOINT» или «INIT» при резервном копировании, чтобы добавить в файл или перезаписать его соответственно.

Вот SQL для этого

BACKUP DATABASE <data_base_name> TO DISK = <File_Path> WITH INIT
Мухаммед Абдулванис
источник