#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. Вы видите «Тип данных:»? По умолчанию используется «Только схема», вы можете изменить его на «Схема и данные», чтобы получить сценарий резервного копирования с данными