[英]Use all backup sets to restore database with SMO
我的問題很簡單。 我有一個.bak文件,其中包含一個或多個備份集。
當我使用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
對象上的FileNumber
。 默認值為1,這就是為什么它總是采用我的第一個備份集的原因。
我只需要將此屬性設置為文件中備份集的數量,現在就可以完成最新的備份。
注意:此差異不涉及差異備份。
我剛剛發現,我可以輕松知道該文件包含多少備份集。
DataTable backupSets = restore.ReadBackupHeader(server);
現在,一個簡單的backupSets.Rows.Count
可以幫助我警告用戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.