【问题标题】:Can't restore database from backup file无法从备份文件恢复数据库
【发布时间】:2013-08-26 15:51:00
【问题描述】:

根据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 时,备份文件按预期创建。

当我单击 button2 时,我可以看到“恢复完成”消息,一切看起来都正常,但是我无法通过另一个使用它的应用程序访问数据库。

在 SQL Management Studio 中,我在数据库名称后看到“(正在恢复...)”,看起来恢复过程永远不会完成。

Visual Studio 2010 和 SQL Server 2012

【问题讨论】:

  • 已经有一个工具可以做到这一点,称为 SQL Server Management Studio。
  • 我知道,但大多数目标用户没有技术能力
  • 所以您想让非技术用户访问恢复 SQL 数据库?这似乎是一个非常糟糕的主意。
  • 用户将单击备份按钮并选择存储备份文件的位置。如果他们需要从任何东西中恢复,那么他们单击“恢复”按钮,数据库将被恢复。这就是他们所做的一切。

标签: c# sql-server smo database-restore


【解决方案1】:

数据库处于恢复状态,因为您指定了:

NoRecovery = true

如果您希望在还原后恢复数据库,请将此行更改为:

NoRecovery = false

Comparison of RECOVERY and NORECOVERY 部分here 中的更多信息。

【讨论】:

  • 工作。非常感谢。 :)
猜你喜欢
  • 2018-06-15
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 2015-08-26
  • 1970-01-01
相关资源
最近更新 更多