Если ты, мой дорогой друг, читаешь эту статью, значит тебя заинтересовал ее заголовок. Что в свою очередь значит, что ты знаком с такими операциями Microsoft Sql Server, как создание резервной копии базы данных (backup) и разворачивание базы данных из бэкапа (restore). Мне тоже приходилось не один, и даже не два раза проделывать эти операции из Management Studio. Некоторым людям приходится делать эти операции каждый день. И вот что я скажу, мой дорогой читатель, вручную это делать реально надоедает. Вот как это можно автоматизировать на C#.
Создание резервной копии базы данных:
Создадим консольное приложение и подключим следующие библиотеки:
А вот и код. Можно изменить первые 3 строчки на получение значений переменных из параметров, передаваемых в метод.
class Program { static void Main(string[] args) { const string sqlServerInstanceName = "QaComputer"; // args[0]; const string databaseName = "TestDb"; // args[1]; const string databaseBackupName = "TestDb.bak"; // args[2]; try { var server = new Server(sqlServerInstanceName); string databaseBackupFilePath = Path.Combine(server.Settings.BackupDirectory, databaseBackupName); var backup = new Backup { Action = BackupActionType.Database, Database = databaseName, Initialize = true, // Все наборы данных бэкапа будут перезаписаны. Incremental = false // Показываем, что это полный бэкап. }; // Устанавливаем файл бэкапа бд. var deviceItem = new BackupDeviceItem(databaseBackupFilePath, DeviceType.File); backup.Devices.Add(deviceItem); backup.SqlBackup(server); Console.WriteLine("Резервное копирование базы данных «{0}» выполнено успешно в «{1}». Для продолжения нажмите Enter...", databaseName, databaseBackupFilePath); Console.ReadLine(); } catch (Exception e) { const string fileName = "errorLog.txt"; File.WriteAllText(fileName, e.ToString()); Console.WriteLine("Резервное копирование базы данных «{0}» завершилось неудачно. Смотри лог ошибки в «{1}». Для продолжения нажмите Enter...", databaseName, fileName); Console.ReadLine(); } } }
Разворачивание базы данных из бэкапа:
Создадим консольное приложение и подключим следующие библиотечки:
А вот и код. Можно изменить первые 4 строчки на получение значений переменных из параметров, передаваемых в метод.
class Program { static void Main(string[] args) { const string sqlServerInstanceName = "QAPC"; // args[0]; const string databaseName = "TestDb2"; // args[1]; const string databaseBackupName = "TestDb.bak"; // args[2]; const string backupDirectory = @"E:\DatabaseBackups";//args[3]; string databaseBackupFilePath = Path.Combine(backupDirectory, databaseBackupName); try { var server = new Server(sqlServerInstanceName); var restore = new Restore { Database = databaseName, Action = RestoreActionType.Database, ReplaceDatabase = true }; var deviceItem = new BackupDeviceItem(databaseBackupFilePath, DeviceType.File); restore.Devices.Add(deviceItem); DataTable dt = restore.ReadFileList(server); DataRow[] rows = dt.Select(); string logicalDatabaseFileName = rows.FirstOrDefault(r => r["Type"].ToString() == "D")["LogicalName"].ToString(); string logicalDatabaseLogFileName = rows.FirstOrDefault(r => r["Type"].ToString() == "L")["LogicalName"].ToString(); // Устанавливаем новый путь для файла бд и файла лога. string logFilePath = Path.Combine(server.Information.MasterDBLogPath, databaseName + "_Log.ldf"); string dataFilePath = Path.Combine(server.Information.MasterDBPath, databaseName + ".mdf"); restore.RelocateFiles.Add(new RelocateFile(logicalDatabaseFileName, dataFilePath)); restore.RelocateFiles.Add(new RelocateFile(logicalDatabaseLogFileName, logFilePath)); // Осуществляем восстановление данных. restore.SqlRestore(server); Database db = server.Databases[databaseName]; db.SetOnline(); server.Refresh(); Console.WriteLine("Восстановление базы данных «{0}» из бэкапа «{1}» выполнено успешно. Для продолжения нажмите Enter...", databaseName, databaseBackupFilePath); Console.ReadLine(); } catch (Exception e) { const string fileName = "errorLog.txt"; File.WriteAllText(fileName, e.ToString()); Console.WriteLine("Восстановление базы данных «{0}» из бэкапа «{1}» завершилось неудачно. Смотри лог ошибки в «{2}». Для продолжения нажмите Enter...", databaseName, databaseBackupFilePath, fileName); Console.ReadLine(); } } }
Можно подпилить эти методы под свои нужды.
Комментариев нет:
Отправить комментарий