[英]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.