2010-02-20 22 views
7

Veritabanını SMO ile geri yüklerken mantıksal veritabanı adını nasıl değiştirebilirim?Mantıksal veritabanı adını SMO ile değiştirin

/Viktor

+0

Veritabanı adı veya dosya ifade ediyor mu? Aşağıdaki tüm cevaplar mantıksal dosya adlarını kastettiğinizi varsayar gibi görünüyor? – Tao

cevap

4

Bir SQL RESTORE DATABASE ile mantıksal veritabanı dosyaları yeniden adlandırmak edemez: o teklif değil. Sadece fiziksel dosyalar WITH MOVE

ile değiştirilebilir. Normalde SQL'de ALTER DATABASE kullanarak mantıksal dosyaları yeniden adlandırın.

Bu, RelocateFile SMO sınıfı tarafından onaylanmış gibi görünüyor.

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 kod doğrudur: RelocateFile çağrısı "bu fiziksel dosyasına bu mantıksal dosya adını map" söylediğini

: yeni fiziksel dosyalara geri yükleme ve mantıksal dosya yeniden adlandırma iki adımlı bir işlemdir. Burada orijinal yedeklemenin mantıksal dosya isimlerini kullanmanız GERÇEKTEN DEĞİL, aksi takdirde ".mdf cannot be overwritten" istisnaları almanız olasıdır.

Yeni mantıksal isimler yapmak için, Rahul kodunda gösterildiği gibi Rename() çağrılarını kullanın.

Ancak, SMO kullanarak veritabanının adını değiştirmek isterseniz:

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(); 
İlgili konular