0

この記事に基づいて、データベースをバックアップ/復元するための小さな 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 をクリックすると、期待どおりにバックアップ ファイルが作成されます。

button2 をクリックすると、「復元が完了しました」というメッセージが表示され、すべて問題ないように見えますが、それを使用する別のアプリケーションでデータベースにアクセスできません。

SQL Management Studio では、データベース名の後に "(Restoring...)" と表示され、復元プロセスが完了していないように見えます。

Visual Studio 2010 および SQL Server 2012

4

1 に答える 1

0

次のように指定したため、データベースは回復中の状態のままです。

NoRecovery = true

復元後にデータベースを復元する場合は、この行を次のように変更します。

NoRecovery = false

詳細については、こちらComparison of RECOVERY and NORECOVERYのセクションをご覧ください。

于 2013-08-26T16:19:37.153 に答える