Резервное копирование и восстановление базы данных SQL Server Со сжатием, когда понимание не поддерживается

#sql-server #nuget #ssms #backup #restore

Вопрос:

Мне нужен модуль обновления резервного копирования и восстановления в моем приложении, потому что он занимает много места на диске.

Модуль выполняет запрос на резервное копирование, но не работает в экспресс-выпусках SQL Server. Мне нужно исправить модуль и сделать резервную копию со сжатием в любой версии SQL, чтобы не переустанавливать фактические экземпляры SQL.

Запрос на резервное копирование SQL со сжатием

 BACKUP DATABASE [MyDataBase] TO  DISK = N'C:backupMyDataBase20210829T213904.bak' WITH NOFORMAT, NOINIT,  NAME = N'MyDataBase-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 10
 

Ошибка SQL

Msg 1844, Уровень 16, Состояние 1, Строка 1
РЕЗЕРВНАЯ БАЗА ДАННЫХ СО СЖАТИЕМ не поддерживается в Express Edition

Ответ №1:

SqlSrv.Резервное копирование Резервное копирование и повторное копирование баз данных Microsoft SQL Server со сжатием Zip в Windows для экземпляров, сжатие которых не поддерживается.

Бак Сжат

Установка пакета

 PM> Install-Package SqlSrv.Backup
 

Резервная база данных

Нужно только указать подключение к SQL, имя базы данных, путь к файлу резервной копии и установить значение true bolZip для сжатия.

 SqlConnection Con = new SqlConnection(@"Data Source=LOCALHOSTSQL2012; User id=sa; Password=MyPwd");
string strDataBase = "MyDataBase";
string strFilePath = @"C:backup"   strDataBase   "_"   DateTime.Now.ToString("yyyyMMddTHHmmss")   ".bak";
//BackUp(Conexion, strDataBase, strFilePath, bolVerify = false, bolZip = false, bolCheckSum = false)
SqlSrv.Backup.Task.BackUp(Con, strDataBase, strFilePath, true, true, true);
 

Восстановить базу данных

Нужно только указать подключение к SQL, имя базы данных, путь к файлу резервной копии и установить значение true bolZip для сжатия.

 SqlConnection Con = new SqlConnection(@"Data Source=LOCALHOSTSQL2012; User id=sa; Password=MyPwd");
string strDataBase = "MyDataBase_New";
string strFileBackup = @"C:backupMyDataBase_20210830T102729.bak.zip";
//Restore(Connection, strDataBase, strFileBackup, bolReplace = false, bolZip = false, strMdfPath = null, strLdfPath = null)
SqlSrv.Backup.Task.Restore(Con, strDataBase, strFileBackup, true, true);
 

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

1. Это не блог. И я подозреваю, что это реклама для автора пакетов. Хотя это может сработать и предоставить решение, которое, по вашему мнению, вам нужно, вы не связываете пакет. Это заставляет всех, кого это интересует, отправиться на поиски в дикую природу.

Ответ №2:

Вы всегда можете создать сценарий своей базы данных. Это не только займет меньше места, но и предоставит вам множество опций, таких как различные версии SQL Server, сценарий только для схемы, сценарий схемы и данных, триггеры со сценарием.

Все, что вам нужно сделать, это

Щелкните правой кнопкой мыши на БД > Задачи >> Создать сценарии…

Шаг 1

Затем следуйте инструкциям мастера на этом экране

Шаг 2

В разделе Дополнительно выберите параметры в соответствии с вашими требованиями.

Шаг 3

Запустите скрипт на нужном вам сервере, чтобы все восстановить. Бум!!

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

1. Спасибо, но мне нужна резервная копия с данными. Ваш запрос только восстановит базу данных без данных.

2. Вы видите «Тип данных:»? По умолчанию используется «Только схема», вы можете изменить его на «Схема и данные», чтобы получить сценарий резервного копирования с данными