无法使用LocalDB还原数据库

时间:2013-09-10 17:42:35

标签: sql-server localdb

我已经使用此代码大约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);

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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