2010-02-20 18 views
7

Jak zmienić nazwę logicznej bazy danych podczas odtwarzania bazy danych za pomocą obiektu SMO?Zmiana nazwy logicznej bazy danych za pomocą SMO

/Wiktor

+0

Czy oznacza nazwę bazy danych lub nazwy plików? Wszystkie poniższe odpowiedzi wydają się zakładać, że masz na myśli logiczne nazwy plików? – Tao

Odpowiedz

4

Nie można zmienić nazwy logiczne plików bazy danych z SQL RESTORE DATABASE: to nie jest oferowany. Tylko pliki fizyczne mogą być zmieniane za pomocą ZAWSZE

W zwykły sposób zmieniasz nazwy plików logicznych, używając ALTER DATABASE w SQL.

Wygląda na to, że został potwierdzony przez klasę SMO RelocateFile.

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

kod Rahul jest poprawna: Przywracanie do nowych zbiorów fizycznych i zmiany nazw plików logiczne jest procesem dwuetapowym:

RelocateFile wezwanie mówi „mapa to logiczną nazwę pliku do tego pliku fizycznego”. Musisz użyć logicznych nazw oryginalnych kopii zapasowych tutaj NIE nowych, w przeciwnym wypadku prawdopodobnie uzyskasz wyjątki ".mdf cannot be overwritten".

Aby utworzyć nowe nazwy logiczne, należy użyć wywołań Rename(), jak pokazano w kodzie Rahula.

Jednakże, jeśli chcesz zmienić nazwę bazy danych przy użyciu SMO:

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(); 
Powiązane problemy