Używam serwera SMO serwera SQL do przywrócenia pliku .bak do nowej bazy danych, ale nie działa.Baza danych odtwarzania smo
serwer SQL jest 2012 i SMO wersja obiektu jest z najnowszej wersji sdk 11,0
plik .bak został utworzony za pomocą SQL Management Studio 2012, tego samego lokalnego komputera, na tym samym komputerze, a także kodowania.
Komunikat o błędzie pojawia się:
Przywracanie nie powiodło się dla serwera 'serwera.
Co jest nie tak z moim kodem?
string dbPath = Path.Combine(@"d:\my data", dbName + "_db" + ".mdf");
string logPath = Path.Combine(@"d:\my data", dbName + "_db" + "_Log.ldf");
Restore restore = new Restore();
BackupDeviceItem deviceItem = new BackupDeviceItem("d:\template.BAK", DeviceType.File);
restore.Devices.Add(deviceItem);
restore.Database = dbName + "_db";
RelocateFile relocateDataFile = new RelocateFile("Data", dbPath);
RelocateFile relocateLogFile = new RelocateFile("Log", logPath);
restore.RelocateFiles.Add(relocateDataFile);
restore.RelocateFiles.Add(relocateLogFile);
restore.Action = RestoreActionType.Database;
restore.ReplaceDatabase = true;
restore.SqlRestore(server);
AKTUALIZACJA: I poddał rozwiązań SMO i spróbował
using (SqlConnection connection = new SqlConnection("Data Source=server;user id=sa;password=xxxxx;"))
{
using (SqlCommand command = new SqlCommand(@"RESTORE DATABASE beauty01 FROM DISK = 'd:\template.bak' WITH RECOVERY, MOVE 'beauty1' TO 'D:\MyData\beauty01_Data.mdf', MOVE 'beauty1_log' TO 'd:\Mydata\beauty01_Log.ldf', REPLACE", connection))
{
connection.Open();
// Add the parameters for the SelectCommand.
command.CommandType = CommandType.Text;
command.ExecuteNonQuery();
}
} >> work good.
Dzięki wszystkim.
Czy istnieje wyjątek wewnętrzny? Sprawdź debugowanie, które prawdopodobnie da ci prawdziwy powód. – Bridge
Czy na pewno nie próbujesz zastąpić istniejących już plików? Jeśli używasz tej samej nazwy dbName, możesz mieć dane i pliki dziennika o tej samej nazwie - spróbuj sprawdzić, czy plik istnieje najpierw, a jeśli tak, nie próbuj tworzyć go ponownie. – Bridge
Nie można otworzyć urządzenia kopii zapasowej "d: \ template.BAK". Błąd systemu operacyjnego 123 (Nazwa pliku, nazwa katalogu lub składnia etykiety woluminu jest niepoprawna). >> .bak został stworzony przez sql management studio 2012 i smo jest poprawną wersją (wersja 11). –