2013-08-26 4 views
0

На основе статьи this я сделал небольшое приложение WPF для резервного копирования/восстановления базы данных.Не удается восстановить базу данных из файла резервной копии

Код:

using System.Windows; 
using Microsoft.SqlServer.Management.Smo; 

namespace DBManager 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow 
    { 
     private Server srv; 
     private Database db; 
     private BackupDeviceItem bdi; 
     private int recoverymod; 

     public MainWindow() 
     { 
      InitializeComponent(); 
      srv = new Server(); 
      db = srv.Databases["MyDB"]; 
      recoverymod = (int) db.DatabaseOptions.RecoveryModel; 
      bdi = new BackupDeviceItem("Test_Full_Backup1", DeviceType.File); 
     } 

     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      BackupDB(); 
     } 

     private void button2_Click(object sender, RoutedEventArgs e) 
     { 
      RestoreDB(); 
     } 

     public void BackupDB() 
     { 
      var bk = new Backup 
      { 
       Action = BackupActionType.Database, 
       BackupSetDescription = "Full backup of MyDB", 
       BackupSetName = "MyDB Backup", 
       Database = "MyDB" 
      }; 

      bk.Devices.Add(bdi); 
      bk.Incremental = false; 
      bk.LogTruncation = BackupTruncateLogType.Truncate; 
      bk.SqlBackup(srv); 
      label1.Content = "Backup finished"; 
      bk.Devices.Remove(bdi); 
     } 

     public void RestoreDB() 
     { 
      db.Drop(); 
      var rs = new Restore { NoRecovery = true }; 
      rs.Devices.Add(bdi); 
      rs.Database = "MyDB"; 
      rs.SqlRestore(srv); 
      label1.Content = "Restoration finished"; 
      db = srv.Databases["MyDB"]; 
      rs.Devices.Remove(bdi); 
      db.RecoveryModel = (RecoveryModel) recoverymod; 
     } 
    } 
} 

Когда я нажимаю button1 резервного файла создается как ожидается.

Когда я нажимаю кнопку2, я вижу сообщение «Восстановить закончен», и все выглядит нормально, но затем я не могу получить доступ к базе данных другим приложением, которое его использует.

В SQL Management Studio я вижу «(Восстановление ...)» после имени базы данных и выглядит так, как процесс восстановления никогда не заканчивается.

Visual Studio 2010 и SQL Server 2012

+0

Существует уже инструмент, который называется SQL Server Management Studio. –

+0

Я знаю, но большинство целевых пользователей не имеют технических навыков –

+0

Итак, вы хотите предоставить нетехническим пользователям доступ к восстановлению баз данных SQL? Это похоже на действительно плохую идею. –

ответ

0

база данных остается в восстанавливающейся состоянии, потому что вы указали:

NoRecovery = true 

Если вы хотите, база данных будет возмещена после восстановления, изменить эту строку :

NoRecovery = false 

Более подробная информация в разделе hereComparison of RECOVERY and NORECOVERY.

+0

Работа. Большое спасибо. :) –

Смежные вопросы