Как получить данные файла резервной копии базы данных Sql и пути к файлам журнала с помощью SMO в C #

Я нашел несколько сообщений о том, как выполнить резервное копирование и восстановление базы данных с помощью сборок Sql SMO на C#. По сути, если я хочу сделать копию базы данных и дать ей новое имя, мне нужно предоставить Relocate Files при выполнении Восстановить. Файлы перемещения состоят из пути к файлу данных и пути к файлу журнала. Если я восстанавливаю существующую базу данных, я могу просто проверить свойство FileGroups объекта базы данных, чтобы получить путь к файлу данных, и его свойство LogFiles, чтобы получить путь к файлу журнала, затем измените имя файла пути, чтобы использовать новое имя базы данных, и укажите их при выполнении восстановления . Без предоставления файлов перемещения операция восстановления просто перезапишет исходную базу данных (перезапишет ее файлы .mdf (данные) и .ldf (журнал)).

Итак, у меня все работает нормально, но теперь я столкнулся со случаем, когда я хочу создать новую базу данных из файла резервной копии базы данных (.bak), который предоставляет пользователь, и они должны иметь возможность указать новое имя для базу данных. Чтобы дать базе данных новое имя и не перезаписывать существующие файлы базы данных (если они уже существуют), мне нужно знать пути к файлу данных и файлу журнала резервной копии.

Существуют ли функции SMO, которые я могу использовать для проверки файла резервной копии базы данных на наличие имени базы данных, пути к файлу данных и пути к файлу журнала? Я предполагаю, что они есть, поскольку SQL Management Studio может это сделать, но просматривая документацию MSDN, я еще не сталкивался с этим.

Заранее спасибо.

== ОТВЕТ ==

Как указано в ответе Бена Тула, ответ заключается в использовании Функция ReadFileList для объекта Restore. Вот пример кода:

Restore restore = new Restore();
restore.Devices.AddDevice(Path.GetFullPath(backupFileToRestoreFrom), DeviceType.File);
DataTable fileList = restore.ReadFileList(server);

string dataLogicalName = fileList.Rows[0][0].ToString();
string dataPhysicalName = fileList.Rows[0][1].ToString();
string logLogicalName = fileList.Rows[1][0].ToString();
string logPhysicalName = fileList.Rows[1][1].ToString();

person deadlydog    schedule 09.11.2013    source источник


Ответы (1)


Проверьте это: как восстановить с помощью восстановить класс пространства имен Microsoft.SqlServer.Management.Smo. В T-SQL это можно сделать с помощью restore filelistonly from disk='path_to_your_backup'

person Ben Thul    schedule 09.11.2013
comment
Спасибо, как показано в сообщении, на которое вы ссылаетесь, ответ состоял в том, чтобы использовать функцию ReadFileList для объекта восстановления (technet.microsoft.com/en-us/library/). Это возвращает DataTable, который содержит пути к файлам данных и журнала, которые мне нужны. Спасибо. - person deadlydog; 11.11.2013