我的问题非常简单。 我有一个包含一个或多个备份集的.bak文件。使用所有备份集与SMO恢复数据库
当我使用SMO使用该.bak文件恢复数据库时,它只需要第一个备份集来完成它的工作。它似乎忽略了其余的集合。
这是为什么?
见我的代码:
//Sets the restore configuration
Restore restore = new Restore()
{
Action = RestoreActionType.Database,
Database = _databaseToRestore.DatabaseName,
ReplaceDatabase = true
};
restore.Devices.Add(new BackupDeviceItem(_backupFilePath, DeviceType.File));
Server server = new Server(_databaseToRestore.ServerName);
DataTable fileList = restore.ReadFileList(server);
string serverDataFolder = server.Settings.DefaultFile;
if (string.IsNullOrEmpty(serverDataFolder))
serverDataFolder = server.Information.MasterDBPath;
foreach (DataRow file in fileList.Rows)
{
restore.RelocateFiles.Add(
new RelocateFile((string)file["LogicalName"],
Path.Combine(serverDataFolder, _databaseToRestore.DatabaseName + Path.GetExtension((string)file["PhysicalName"]))));
}
//Gets the exclusive access to database
server.KillAllProcesses(_databaseToRestore.DatabaseName);
restore.Wait();
restore.SqlRestore(server);
我认为BackupDeviceItem能带给我多少备份集里面有,这样,我可以警告用户反馈,但事实并非如此。
任何人都有这方面的线索?
谢谢你的时间。
这非常有用,感谢您发布您的发现。我想补充说明,通过Restore.Devices.Add()将它作为设备添加到还原对象,告诉它哪个备份文件要读取您的标题。 MSDN上的完整示例,http://msdn.microsoft.com/zh-cn/library/microsoft.sqlserver.management.smo.restore.readbackupheader.aspx – Despertar 2012-04-09 04:28:23