簡體   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