0

我已经使用此代码大约 2 年将 2008 r2 备份恢复到 2008 r2 并且每次都有效。我现在正在尝试使用相同的代码从 2008 r2 备份恢复到 2012 localdb,但每次都失败。错误消息如下。不仅恢复失败,它使我当前的数据库处于“恢复挂起”状态,并且无法使用。我正在使用 c#,这一切都必须以编程方式完成,无需用户或 DBA 参与。你能帮我让这件事重回正轨吗?

        using(var connection = new SqlConnection(connectionString))
        {
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = String.Format("Alter Database {0} SET SINGLE_USER With ROLLBACK IMMEDIATE", dbName);
            cmd.CommandType = CommandType.Text;
            cmd.Connection = connection;
            connection.Open();
            cmd.ExecuteNonQuery();

            SqlCommand cmd2 = new SqlCommand();
            cmd2.CommandText = String.Format(@"RESTORE DATABASE {0} FROM DISK = '{1}'", dbName, backupFilePath);
            cmd2.CommandType = CommandType.Text;
            cmd2.Connection = connection;
            cmd2.ExecuteNonQuery();
        }

System.Data.SqlClient.SqlException (0x80131904):找不到逻辑数据库文件“MyData_log”。指定文件的完整路径。RESTORE 无法启动数据库“MyData”。RESTORE DATABASE 异常终止。

编辑:将一行更改为

            cmd2.CommandText = String.Format(@"RESTORE DATABASE {0} FROM DISK = '{1}' WITH  FILE = 1, NOUNLOAD, REPLACE, STATS = 5", dbName, backupFilePath);

到目前为止没有任何区别。

4

1 回答 1

0

您不应该 RESTORE DATABASE 并使用 WITH REPLACE 选项吗?您的连接字符串是否将您连接到运行这些命令的“主”数据库,而不是正在恢复的数据库?

您是否使用 SQL Server Management Studio 查看 *.mdf 和 *.ldf 文件的数据库文件名和位置?

我还发现,有时数据库的第一次还原无法按预期工作,但后续的还原...您是否尝试过手动还原数据库(使用 SQL Server Management Studio...右键单击数据库、任务、恢复数据库),然后尝试以编程方式运行代码?

通常,在以编程方式进行恢复时,您希望获取 mdf 和 ldf 文件的文件名,然后在 RESTORE 命令中使用“WITH REPLACE”选项指定它们。

于 2013-09-10T22:19:20.940 回答