このコードを約 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 が異常終了しています。
編集:1行をに変更
cmd2.CommandText = String.Format(@"RESTORE DATABASE {0} FROM DISK = '{1}' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 5", dbName, backupFilePath);
これまでのところ、違いはありません。