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
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
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.
//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 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();
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