2010-02-20 6 views
7

Wie kann ich den logischen Datenbanknamen beim Wiederherstellen einer Datenbank mit SMO ändern?Ändern des logischen Datenbanknamens mit SMO

/Viktor

+0

Haben Sie die Datenbanknamen bedeuten, oder die Dateinamen? Alle folgenden Antworten scheinen davon auszugehen, dass Sie die logischen Dateinamen meinen? – Tao

Antwort

4

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.

8
//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"); 
0

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(); 
Verwandte Themen