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