2010-02-20 3 views
7

Как изменить имя логической базы данных при восстановлении базы данных с помощью SMO?Изменение имени логической базы данных с помощью SMO

/Viktor

+0

Вы имеете в виду имя базы данных или имена файлов? Все приведенные ниже ответы предполагают, что вы имеете в виду логические имена файлов? – Tao

ответ

4

Вы не можете переименовать логические файлы базы данных с помощью SQL RESTORE DATABASE: это не предлагается. Только физические файлы могут быть изменены с помощью WITH MOVE

Вы обычно переименовываете логические файлы с помощью ALTER DATABASE в SQL.

Это, возможно, будет подтверждено классом SMO .

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 правильна: Восстановление на новые физические файлы и переименование логических файлов является двухступенчатый процессом:

RelocateFile вызова говорит «карта это логическое имя файла этого физического файл». Вы должны использовать логические имена файлов исходной резервной копии здесь НЕ новые, иначе вы, скорее всего, получите «.mdf cannot be overwritten» исключения.

Чтобы создать новые логические имена, используйте вызовы Rename(), как показано в коде Рахула.

Однако, если вы хотите изменить имя базы данных с помощью 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(); 
Смежные вопросы