【发布时间】:2023-04-03 20:29:02
【问题描述】:
我在我的程序中插入了一个 SQL 数据库备份和恢复部分。我一直在使用 MSDN 示例(尝试了另一个,但它不起作用)。 MSDN 页面 - http://msdn.microsoft.com/en-us/library/ms162133.aspx
我已使备份文件正常工作,并已在 Management Studio 中测试了该文件。
但我在恢复文件时遇到问题。
代码似乎可以运行,但 SQL Server 中的数据库卡在“正在恢复...”中
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' 被标记为正在恢复,并且处于不允许运行恢复的状态。”
"数据库已恢复:数据库:firstRecoverTest,创建日期(时间):2011/09/20(15:44:48),第一个 LSN:37:159:37,最后一个 LSN:37:175:1,编号转储设备数:1,设备信息:(FILE=1,TYPE=DISK:{'C:\Users\Administrator\Desktop\installer_backup'})。信息性消息。无需用户操作。”
但是,当我使用 SQL Management Studio 进行正常恢复时,还有 2 个日志条目说
“正在启动数据库 '[databaseName]'。”
“数据库'[databaseName]'的恢复已完成。数据库现在可用”
不幸的是,我没有足够的声誉来发布关于它在 SQL Management Studio 中的小图像。
【问题讨论】: