Почему размер резервной копии базы данных отличается при резервном копировании из Query и SSMS?

#sql #sql-server #ssms

#sql #sql-сервер #ssms

Вопрос:

Меня смущает размер файла, который я создаю с помощью SSMS и Query.
Если я создам файл из SSMS в его папке по умолчанию, что-то вроде «C:Program Files Microsoft SQL Server MSSQL14.NAMEDINSTANCE MSSQL Backup» выходной файл, скажем, Db1.bak, составляет около 198292 КБ
Та же база данных, если я создаю резервную копию с помощью запроса "backup database Db1 to disk='D:Db1.bak' , размер файла составляет всего 6256 КБ

Иногда другая база данных говорит, что Db2 дает тот же размер файла, т.Е. 6256 КБ (и Db1, и Db2 имеют идентичные (одинаковые) схемы, только данные в них разные.)
А резервное копирование с помощью SSMS дает 33608 КБ, что кажется удовлетворительным.

Я также попытался проверить всю базу данных в SSMS подобным RESTORE VERIFYONLY FROM DISK = 'D:BACKUPDb1.bak'
GO
образом, и результат действителен при каждой проверке базы данных.

Я также попытался удалить Db1 из SSMS и восстановить файл размером менее КБ и проверил некоторые данные из нескольких таблиц (не все), и, похоже, все данные в таблицах отображаются правильно, но размер файла меня не устраивает.

Спасибо.

Комментарии:

1. если я не ошибаюсь, запрос примет сжатую резервную копию.

2. SSMS при использовании графического интерфейса по-прежнему выполняет набор инструкций SQL. Напишите сценарий выполнения запроса SSMS и опубликуйте его (однако ответ может внезапно появиться до того, как вы это сделаете :)).

3. @Srikarmogaliraju Я этого не знал. Но он сжимается до того же размера файла, что и Db1 и Db2??

4. Только если это настройка по умолчанию @Srikarmogaliraju.

5. @Larnu Я не понял ваш комментарий.

Ответ №1:

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

Если параметр сервера backup compression default on , даже если вы не упоминаете его в своей backup команде, compression будет применен. Так что в обоих случаях было бы compressed backup . Но это легко увидеть, просто запустите эту команду для обоих backups :

 restore headeronly
from disk = 'here_the_full_path_with_filename';
  

В 5-м столбце вы получите флаг, если ваш backup есть compressed .

Но причина этой разницы в другом, и вы увидите ее при запуске restore headeronly : вы создали несколько backups файлов в один и тот же файл.

Вы использовали backup команду with noinit из SSMS , и то же file name самое, так что теперь этот файл содержит более одного backup и restore headeronly покажет их все.