Wie kann ich den logischen Datenbanknamen beim Wiederherstellen einer Datenbank mit SMO ändern?Ändern des logischen Datenbanknamens mit SMO
/Viktor
Wie kann ich den logischen Datenbanknamen beim Wiederherstellen einer Datenbank mit SMO ändern?Ändern des logischen Datenbanknamens mit SMO
/Viktor
Sie können nicht die logischen Datenbankdateien mit einer SQL umbenennen RESTORE DATABASE: es wird nicht angeboten. Nur physische Dateien können mit WITH MOVE geändert werden
Sie benennen logische Dateien normalerweise mit ALTER DATABASE in SQL um.
Dies scheint durch die RelocateFile SMO-Klasse bestätigt zu werden.
//restore is the Restore object in SMO
restore.RelocateFiles.Add(new RelocateFile(SourceDataFile.Name, Path.Combine(destinationDirectory, destination.Database + ".mdf")));
restore.RelocateFiles.Add(new RelocateFile(SourceLogFile.Name, Path.Combine(destinationDirectory, destination.Database + "_log.ldf")));
restore.SqlRestore(destinationServer);
var destinationDatabase = destinationServer.Databases[destinationDatabaseName];
//renaming the logical files does the trick
destinationDatabase.FileGroups[0].Files[0].Rename(destinationDatabaseName);
destinationDatabase.LogFiles[0].Rename(destinationDatabaseName + "_log");
Rahul Code korrekt ist: die Wiederherstellung auf neue physische Dateien und Umbenennen von logischen Dateien ist ein zweistufiger Prozess:
Der RelocateFile
Aufruf „Karte Namen dieses logischen Datei auf diese physische Datei“ sagt. Sie müssen die logischen Dateinamen der ursprünglichen Sicherung hier NICHT neue verwenden, sonst erhalten Sie wahrscheinlich ".mdf cannot be overwritten
" Ausnahmen.
Um neue logische Namen zu erstellen, verwenden Sie anschließend die Aufrufe Rename()
, wie in Rahuls Code gezeigt.
Wenn Sie jedoch den Namen der Datenbank mit SMO ändern mögen:
var srvConn = new ServerConnection(serverName)
{
LoginSecure = false,
Login = dbUserName,
Password = dbUserPassword,
DatabaseName = "master",
};
var mainDb = new Database(srvConn, "old database name");
mainDb.Rename("new database name");
mainDb.Refresh();
Haben Sie die Datenbanknamen bedeuten, oder die Dateinamen? Alle folgenden Antworten scheinen davon auszugehen, dass Sie die logischen Dateinamen meinen? – Tao