使用C#.net编码恢复数据库的问题

时间:2011-04-08 07:43:07

标签: c# database restore

我为数据库进行了一些差异备份,这将备份上次修改后的数据,这些数据将附加到之前发生的完整备份文件中。现在,当我尝试恢复.bak文件时,整个数据正在获取备份,是否可以将备份仅作为我想要的最后备份数据?可以,任何人都可以帮助我。

private void RestoreDataBase(Server MyServer, Database MyDataBase, string DevicePath, string Type)
     {
         try
         {
             progressBar1.Value = 0;
             Restore restoreDB = new Restore();
             restoreDB.Action = RestoreActionType.Database;
             restoreDB.Database = MyDataBase.Name;
             restoreDB.Devices.AddDevice(DevicePath, DeviceType.File);
             restoreDB.ReplaceDatabase = true;
             restoreDB.NoRecovery = true;
             restoreDB.PercentComplete += new PercentCompleteEventHandler(rstDatabase_PercentComplete);
             restoreDB.Complete += new ServerMessageEventHandler(rstDatabase_Complete);
             restoreDB.SqlRestore(MyServer);
         }
         catch (Exception ex)
         {
             WriteToListView(ex.Message.ToString());
             writetoLog(ex.Message.ToString());
         }
     }

以上是我正在使用的编码,数据库是Sql Server 2008,我用于差异备份的编码如下

private void BackupDataBaseDifferential(Server MyServer, Database MyDataBase, string DestinationPath, string Type)
     {
         try
         {
             WriteToListView("Taking the Differential Backup for " + MyDataBase.Name);
             Backup backDB = new Backup();
             backDB.Action = BackupActionType.Database;
             backDB.Database = MyDataBase.Name;
             backDB.Devices.AddDevice(DestinationPath, DeviceType.File);
             backDB.BackupSetName = "Sql Database Backup Differential";
             backDB.BackupSetDescription = "Sql Database Backup - DifferentialType";
             backDB.ExpirationDate = DateTime.Now.AddDays(5);
             backDB.Initialize = false;
             backDB.Incremental = true;
             if (Type == "Manual")
             {
                 progressBar1.Value = 0;
                 backDB.PercentComplete += new PercentCompleteEventHandler(bd_PercentComplete);
                 backDB.Complete += new ServerMessageEventHandler(bd_Complete);
             }
             else if (Type == "Automatic")
             {
                 backDB.PercentComplete += CompletionStatusInPercent;
                 backDB.Complete += Backup_Completed;
             }
             backDB.SqlBackup(MyServer);
         }
         catch (Exception ex)
         {
             WriteToListView(ex.Message.ToString());
             writetoLog(ex.Message.ToString());
         }
     }

因此,如果我使用上述编码,将采用在数据库中修改的最后数据(之前已完全备份)。所以,我的问题是当我使用RestoreDataBase()方法整个数据库正在恢复时,bcoz所有完全备份数据和差异备份数据将只在一个文件ex:Sample.bak中。如果我只想要最后修改的数据是不可能通过指定修改到数据库的数据的日期来进行?

1 个答案:

答案 0 :(得分:0)

也许很傻,但是如果你将db导出为.sql,当你只需要恢复一些数据时,你可以读取文件和“过滤”行来恢复...
无论如何还有另一个线程在讨论这个问题,看看here