首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从联网SQLServer的SMO恢复永远不会完成(从C#调用)

从联网SQLServer的SMO恢复永远不会完成(从C#调用)
EN

Stack Overflow用户
提问于 2012-02-24 16:28:07
回答 1查看 323关注 0票数 0

我尝试将数据库从联网的SQLServer复制到本地SQLExpress:

代码语言:javascript
复制
private void DoRestore()
    {
         if (!File.Exists(fileNach))
         {
             MessageBox.Show("Restore gescheitert " + fileNach);
             return;
         }

        Restore res = new Restore();
        Server srv = new Server(Environment.MachineName.ToString()+@"\SQLEXPRESS");
        //MessageBox.Show("Ziel Server :"+srv.Name);

        try
        {
            string fileName = @fileNach;
            string databaseName = "Outdoor";
            srv.KillAllProcesses(databaseName);
            res.Database = databaseName;
            res.Action = RestoreActionType.Database;
            res.Devices.AddDevice(fileName, DeviceType.File);
            res.ReplaceDatabase = true;
            res.NoRecovery = true;

            string odb;
            string odblog;
            odb = @"C:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\Outdoor.mdf";
            odblog = @"C:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\Outdoor.ldf";

            res.RelocateFiles.Add(new RelocateFile("Outdoor", odb));
            res.RelocateFiles.Add(new RelocateFile("Outdoor_Log", odblog));

            // restore starten
            res.SqlRestore(srv);

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
}

此代码在SQLExpress上启动恢复进程,但永远不会结束。将在目标目录中创建mdf和日志文件,但恢复未完成。

我也尝试了srv.KillAllProcesses(databaseName);,但没有结果。

在C#级别不会引发任何错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-24 17:28:43

你说它永远不会结束,是不是你看到你的代码完成了,但数据库却卡在了“恢复”模式中?如果是这样,我认为您希望使用recovery进行恢复,否则将使数据库无法运行。尝试将NoRecovery设置为false而不是true:

代码语言:javascript
复制
res.NoRecovery = false;

来自here

  1. 通过回滚未提交的事务,使数据库随时可供使用。无法恢复其他事务日志。(使用RECOVERY进行恢复)

恢复数据库。此选项相当于Transact-SQL RESTORE语句中的RECOVERY选项。

仅当没有要还原的日志文件时才选择此选项。

  • 使数据库不可操作,并且不回退未提交的事务处理。可以恢复其他事务日志。(使用NORECOVERY进行恢复)

使数据库处于未恢复状态。此选项等效于在Transact-SQL RESTORE语句中使用NORECOVERY选项。

选择此选项时,[保留复制设置]选项为unavailable.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9427578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档