Я работаю над приложением базы данных, чтобы восстановить базу данных с ее журналами транзакций.Я использую библиотеку объектов управления SQL Server (SMO).
Требования этого приложения обусловливают необходимость восстановления файла резервной копии базы данных и журналов ее транзакций в отдельных процессах.Я могу восстановить файл резервной копии без проблем, однако, когда дело доходит до восстановления журналов транзакций, я сталкиваюсь с проблемой:
public void RestoreTransactionLogs(Server srv, DirectoryInfo filePath, DatabaseType dbType)
{
Restore res = new Restore()
{
Database = dbType.ToString(),
Action = RestoreActionType.Log,
ReplaceDatabase = false
};
FileInfo[] files = filePath.Parent.GetFiles("*.trn");
foreach (FileInfo f in files)
{
res.Devices.AddDevice(f.FullName, DeviceType.File);
}
try
{
res.SqlRestore(srv);
}
catch (SmoException ex)
{
Log.Fatal("An SMO Exception has occurred when restoring the database: " + dbType.ToString() + ": " + ex.Message);
throw ex;
}
catch (Exception ex)
{
Log.Fatal("An exception has occurred when restoring the database: " + dbType.ToString() + ": " + ex.Message);
throw ex;
}
}
Используя тестовый файл резервной копии и 20 журналов транзакций, я сталкиваюсь со следующей ошибкой:
SmoException: System.Data.SqlClient.SqlError: Носитель, загруженный в «D: \ Test Folder \ testDatabase \ log_00001.trn», отформатирован для поддержки 1 семейств носителей, но 20 семейств носителейожидается в соответствии со спецификацией устройства резервного копирования.
У меня такое ощущение, что я не добавляю журналы транзакций в свою коллекцию устройств должным образом, или я должен добавлять их другим способом, но я не уверен, где проверить,Документация от MSDN для журналов транзакций скудна, и я не смог найти много онлайн.Спасибо!