我的問題非常簡單。 我有一個包含一個或多個備份集的.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