#c# #sql-server-2008 #backup
#c# #sql-server-2008 #резервное копирование
Вопрос:
Я исследовал возможности создания резервных копий базы данных с помощью SMO с C #. Задача довольно проста, а код понятен. У меня только один вопрос: как я могу проверить, действительно ли была создана резервная копия?
Резервное копирование SqlBackup.Метод SqlBackup не возвращает параметров, и я даже не знаю, выдает ли он какие-либо исключения. (единственное, что я знаю, это то, что это блокирует, потому что есть также метод SqlBackupAsync)
Я был бы признателен за любую помощь.
Комментарии:
1. Я сам никогда этим не пользовался, но, просмотрев документы, можно предположить, что вы могли бы прикрепить обработчик событий к Complete , чтобы посмотреть, возвращает ли он код ошибки. Но я не уверен на 100%, что это будет вызвано в неасинхронном случае, и должен быть способ получше!
Ответ №1:
вы можете, и это очень возможно, сделать то, о чем вы просили,
но выполнить резервное копирование самостоятельно с помощью SMO не очень сложно, но сложная часть заключается в управлении резервным копированием и восстановлением.
было бы сложно поместить сюда весь код, но он не поместится. поэтому я сделаю все возможное, чтобы поместить нужные вам строки.
Резервное копирование SqlBackup.SqlBackup не возвращает никакого значения, это функция void. но он принимает один параметр, который является «Server», попробуйте следующий код:
Server srvSql;
//Connect to Server using your authentication method and load the databases in srvSql
// THEN
Backup bkpDatabase = new Backup();
bkpDatabase.Action = BackupActionType.Database;
bkpDatabase.Incremental = true; // will take an incemental backup
bkpDatabase.Incremental = false; // will take a Full backup
bkpDatabase.Database = "your DB name";
BackupDeviceItem bDevice = new BackupDeviceItem("Backup.bak", DeviceType.File);
bkpDatabase.Devices.Add(bDevice );
bkpDatabase.PercentCompleteNotification = 1;// this for progress
bkpDatabase.SqlBackup(srvSql);
bkpDatabase.Devices.Clear();
Комментарии:
1. Я думаю, он хочет знать, не удалось ли выполнить задание. Как вы можете это проверить?
2. У меня уже есть код, который вы предоставили 🙂 Дело в том, что я хочу быть на 100% уверен, что операция резервного копирования прошла успешно, что крайне важно для того, что я хочу сделать.
3. можете ли вы проверить это на завершенном событии?
Ответ №2:
Я исследовал проблему с помощью Reflector.NET (Я полагаю, это законно, поскольку RedGate является сертифицированным партнером Ms Gold и отражателем.NET открывает библиотеки .NET из коробки). Как я выяснил, метод выдает два типа исключений:
Исключение FailedOperationException — в большинстве случаев другие исключения «переводятся» (я полагаю, перевод означает создание нового исключения FailedOperationException и установку InnerException на то, что было фактически выдано)
Исключение UnsupportedVersionException — в одном случае, когда для усечения журнала установлено значение TruncateOnly, а основная версия сервера больше или равна 10 (которая является sql server 2008?)
Это частично решает мою проблему, потому что я не уверен на 100%, что если что-то пойдет не так, эти исключения действительно будут сгенерированы.