Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Can';t使用LocalDB恢复数据库_Sql Server_Localdb - Fatal编程技术网

Sql server Can';t使用LocalDB恢复数据库

Sql server Can';t使用LocalDB恢复数据库,sql-server,localdb,Sql Server,Localdb,我已经使用这段代码大约2年了,将2008 r2备份恢复到2008 r2,每次都能正常工作。我现在尝试使用相同的代码从2008 r2备份恢复到2012 localdb,但每次都失败。下面是错误消息。恢复不仅失败,而且使当前数据库处于“恢复挂起”状态,无法使用。我使用的是c#,这一切都必须以编程方式完成,不需要用户或DBA的参与。你能帮我把这件事弄回正轨吗 using(var connection = new SqlConnection(connectionString))

我已经使用这段代码大约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”。指定文件的完整路径。 还原无法启动数据库“MyData”。 还原数据库正在异常终止

编辑:将一行更改为

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

到目前为止还没有什么不同。

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

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

我还发现,有时数据库的第一次恢复并不像预期的那样有效,但随后的恢复确实有效。。。您是否尝试过手动还原数据库(使用SQL Server Management Studio…右键单击数据库、任务、还原数据库),然后尝试以编程方式运行代码


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

请参见问题的编辑。我从SSMS restore窗口复制了sql以用作新命令。到目前为止,还无法将sql 2008 r2数据库恢复到sql 2012数据库。我初步发现,如果我在测试机器上安装完整的sql express 2012,即使我仍在使用LocalDB,恢复也可以工作。非常奇怪,我必须继续测试。