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

时间:2010-06-22 15:27:48

标签: c# sql-server database restore 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可以给我一个关于里面有多少备份集的反馈,这样我可以警告用户,但事实并非如此。

任何人都有这方面的线索吗?

感谢您的时间。

2 个答案:

答案 0 :(得分:3)

好的,解决了我的问题。

FileNumber对象上的重要字段为Restore。 默认值为1,这就是为什么它总是占用我的第一个备份集。

我只需要将此属性设置为文件中的备份集数量,现在需要完成最近的备份。

注意:此问题不涉及差异备份。

答案 1 :(得分:2)

我刚刚发现我可以很容易地知道该文件包含多少个备份集。

DataTable backupSets = restore.ReadBackupHeader(server);

现在,一个简单的backupSets.Rows.Count可以帮助我警告用户。