【问题标题】:Use all backup sets to restore database with SMO使用所有备份集通过 SMO 还原数据库
【发布时间】:2010-06-22 15:27:47
【问题描述】:

我的问题很简单。 我有一个包含一个或多个备份集的 .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 可以给我一个关于里面有多少备份集的反馈,这样我可以警告用户,但事实并非如此。

有人知道这件事吗?

感谢您的宝贵时间。

【问题讨论】:

    标签: c# sql-server database restore smo


    【解决方案1】:

    好的,解决了我的问题。

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

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

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

    【讨论】:

      【解决方案2】:

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

      DataTable backupSets = restore.ReadBackupHeader(server);
      

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

      【讨论】:

      • 这非常有用,感谢您发布您的发现。我想添加它以告诉它您要读取哪个备份文件的标题,您可以通过Restore.Devices.Add() 将其作为设备添加到恢复对象。 MSDN 上的完整示例,msdn.microsoft.com/en-us/library/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多