繁体   English   中英

使用所有备份集通过SMO还原数据库

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM