首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#正在恢复数据库时,遇到了“正在还原...”

C#正在恢复数据库时,遇到了“正在还原...”
EN

Stack Overflow用户
提问于 2011-09-19 12:19:12
回答 1查看 2.6K关注 0票数 0

我正在程序中插入SQL数据库备份和恢复部分。我一直在使用MSDN示例(尝试另一个示例,但它不起作用)。MSDN页面- http://msdn.microsoft.com/en-us/library/ms162133.aspx

我已经使备份文件正常工作,并在Management Studio中对该文件进行了测试。

但我在恢复文件时遇到了麻烦。

代码似乎正常工作,但SQL Server中的数据库陷入了“还原...”

代码语言:javascript
复制
            if (openFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                Server sqlServer = new Server();

                Restore sqlRestore = new Restore();
                sqlRestore.NoRecovery = true;
                sqlRestore.Action = RestoreActionType.Database;

                BackupDeviceItem deviceItem = new BackupDeviceItem(openFile.FileName, DeviceType.File);
                sqlRestore.Devices.Add(deviceItem);
                sqlRestore.Database = "firstRecoverTest";

                sqlRestore.SqlRestore(sqlServer);

                //Add the recovered database into the Entity Table
                SqlCommand intoEntity = new SqlCommand("IF NOT EXISTS(SELECT entityName FROM Entitys WHERE entityName = 'firstRecoveryTest') INSERT INTO Entitys VALUES ('firstRecoveryTest');", sqlConnection);                   
                sqlConnection.Open();
                intoEntity.ExecuteNonQuery();

                Database db = default(Database);
                db = sqlServer.Databases["firstRecoverTest"];
                db.RecoveryModel = (RecoveryModel)1;
                db.AutoClose = true;
                //db.Alter();

            }

在这个例子中有一个db.Alter();函数,但是它抛出了一个错误"Alter failed for Database 'firstRecoverTest'“。

请让我知道你的想法

提前感谢

更新

在插入"ReplaceDatabase = true;“之后,最终结果没有变化。同样,逐行遍历代码,表明它通过了。

"db.Alter();“就是放在代码末尾的那个(显示为注释)。它在创建备份时使用,并且工作正常。使用db.Alter()时,InnerError会显示此信息;

“当数据库处于正在还原状态时,不允许ALTER DATABASE”

有趣的部分是SQL日志文件。我得到了3个日志:

“正在启动数据库‘firstRecoverTest’。”

“数据库'firstRecoverTest‘被标记为正在还原,并且处于不允许运行恢复的状态。”

“数据库已还原:数据库:{'C:\Users\Administrator\Desktop\installer_backup'}).,创建日期(时间):2011/09/20(15:44:48),第一个firstRecoverTest : 37:159:37,最后一个LSN: 37:175:1,转储设备数: 1,设备信息:(FILE=1,TYPE=DISK: LSN信息性消息。无需用户操作。”

但是,当我使用SQL Management Studio执行普通恢复时,有两个以上的日志条目显示

“正在启动数据库‘databaseName’。”

“数据库'databaseName‘上的还原已完成。该数据库现在可用”

不幸的是,我没有足够的名气来发布它在SQL Management Studio中的一个小图像。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-19 17:41:33

您应该尝试删除数据库或使用sqlRestore.ReplaceDatabase = true;

http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.restore.replacedatabase.aspx

如果看起来什么都没有发生,您可以在单独的线程中启动该进程,并通过使用这些事件来连接事件以通知进度更改。

代码语言:javascript
复制
sqlRestore.Complete += new ServerMessageEventHandler(completionEvent);
sqlRestore.PercentCompleteNotification = 10; // Call progress event every x percent change.
sqlRestore.PercentComplete += new PercentCompleteEventHandler(progressEvent);

如果这不起作用,你能发布不起作用的修改代码吗?还要检查SQL server日志和权限。

已更新

好的,这个更新更有意义。原因是因为您正在设置sqlRestore.NoRecovery = true;。这样做的效果是,还原完成后,数据库将保持恢复状态,因此除了刚刚还原的完整备份之外,还可以还原一个额外的差异备份。

当它处于此状态时,您将无法对数据库执行更多操作。我建议,除非您需要它,否则保留缺省值NoRecovery = false

请参阅http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.backuprestorebase.norecovery.aspx

希望这能有所帮助。

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

https://stackoverflow.com/questions/7466411

复制
相关文章

相似问题

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