Используйте все наборы резервных копий для восстановления базы данных с SMO - PullRequest
2 голосов
/ 22 июня 2010

Моя проблема действительно проста.У меня есть файл .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 ]

3 голосов
/ 25 июня 2010

Хорошо, исправил мою проблему.

Важное поле - FileNumber для объекта Restore. Значение по умолчанию равно 1, поэтому он всегда занимал мой первый резервный набор.

Мне просто нужно было установить это свойство равным количеству наборов резервных копий в файле, и теперь оно берет самое последнее сделанное резервное копирование.

Примечание: в этом случае нет различий между резервными копиями.

2 голосов
/ 22 июня 2010

Я только что узнал, что могу легко узнать, сколько наборов резервных копий содержит файл.

DataTable backupSets = restore.ReadBackupHeader(server);

Теперь простой backupSets.Rows.Count может помочь мне предупредить пользователя.

...