我已经使用此代码大约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);
到目前为止没有任何区别。
答案 0 :(得分:0)
你不应该RESTORE DATABASE并使用WITH REPLACE选项吗?您的连接字符串是否将您连接到“主”数据库以运行这些命令,而不是正在恢复的数据库?
您是否使用SQL Server Management Studio查看* .mdf和* .ldf文件的数据库文件名和位置?
我还发现,有时数据库的第一次恢复不能按预期工作,但后续的确实...你试过手动恢复数据库(使用SQL Server Management Studio ...右键单击数据库,任务,还原数据库),然后尝试以编程方式运行代码?
通常,在以编程方式执行还原时,您需要获取mdf和ldf文件的文件名,然后在RESTORE命令中使用“WITH REPLACE”选项指定它们。